Козак Вус і найкраща країна#8754

Козак Вус і найкраща країна

5 секунд
1 024 мегабайти
Легка

Козак Вус нарешті знайшов країну своєї мрії. Вона складається з міст, між якими не проходить жодна дорога. Звичайно, Вус захотів виправити цю ситуацію, і тому придумав різних двосторонніх доріг, які можна було би прокласти. За його задумом кожна дорога з'єднує два різні міста. Але виникла проблема: кожне місто може виділити на побудову доріг c_i копійок, а для кожної дороги на її побудову пішло б w_j копійок. Тому Козак вирішив, що йому вистачить побудувати декілька доріг так, аби всі міста стали сусідами. Міста називаються сусідами, якщо можливо дорогами країни дістатися з одного міста в інше.

При плануванні своїх робіт Козак Вус зрозумів одну річ: коли він будуватиме чергову дорогу, міста будуть об'єднуватися в групи сусідів. Щоб побудувати -ту дорогу, потрібно, щоб міста (або їх сусіди), між якими будується дорога, сумарно мали принаймні w_j копійок (адже спершу потрібно заплатити за дорогу й лише потім будувати). Після побудови дороги бюджети міст об'єднуються, а вартість дороги вираховується з нової спільної казни.

Для кожного з міст ви знаєте число c_i — кількість копійок, які може витратити місто . Для кожної з доріг ви знаєте числа v_i, u_i та w_i, які означають, що дорога з'єднує міста v_i та u_i, а на її побудову потрібно w_i копійок. Скажіть, чи можливо вибрати певну кількість доріг та впорядкувати їх так, щоб усі міста стали сусідами. А якщо це можливо, то знайдіть послідовність доріг, у якій їх потрібно будувати.

Вхідні дані

Перший рядок містить три цілі числа , та (1 \leq n \leq 10^6, 0 \leq m \leq 10^6, 0 \leq g \leq 7) — кількість міст, кількість доріг та номер блока відповідно.

Наступний рядок містить цілих чисел c_1, c_2, \ldots, c_n (1 \leq c_i \leq 10^6) — початкова кількість копійок в -му місті.

Кожний із наступних рядків містить по три цілі числа v_i, u_i та w_i (1 \leq v_i,u_i \leq n, 1 \leq w_i \leq 10^6) — номери міст, між якими -та дорога, та ціна її побудови відповідно.

Взаємодія

Для того, щоб показати дороги, які потрібно побудувати, використовуйте таку функцію:

void add(integer i)
  • Ця функція будує дорогу під номером (1\leq i \leq m).

Вам потрібно реалізувати одну функцію:

boolean solve(integer n, integer m, integer g, array of integers c, array of integers v,
              array of integers u, array of integers w)
  • — кількість міст у країні;

  • — кількість доріг, які можна прокласти;

  • — номер блока;

  • c_i (|c|=n) — початкова кількість копійок у -тому місті;

  • v_i та u_i (|v|=|u|=m) — номери вершин, що з'єднує -та дорога;

  • w_i (|w|=m) — кількість копійок, необхідних на побудування -тої дороги;

  • ця функція повинна повертати true, якщо можливо правильно вибрати послідовність доріг, і false, якщо ні.

Якщо ваша функція повертає true, то до того, як вона його поверне, вона має зробити виклики функції add для всіх побудованих доріг у тому порядку, у якому вони побудуються.

Вихідні дані

Якщо функція повертає false, то в першому рядку буде виведено одне число .

Інакше в першому рядку буде виведено число — кількість побудованих доріг. У наступних рядках буде виведено по одному число — номер побудованої дороги.

Приклади

Приклад 1

Loading
Loading

Приклад 2

Loading
Loading

Примітка

У першому прикладі країна складається з міст, а план Козака Вуса складається з доріг. Спочатку будується дорога під номером : міста та об'єднаються у групу, а з їхнього загального бюджету сплачується копійки. На рахунку цієї групи залишається копійок. Після побудови дороги під номером бюджет групи буде складати копійки, адже приєдналося місто з бюджетом у копійки, а також витратили копійки на побудову дороги. Після побудови -ої дороги всі міста стануть сусідами, а їх загального бюджету вистачить, щоб заплатити копійок за дорогу.

У другому прикладі неможливо вибрати дороги та порядок їх побудови так, щоб усі міста стали сусідами й щоб за усі дороги було заплачено.

Оцінювання

  1. ( балів) n \leq 10; m = n - 1; c_i = 1; w_i = 1; якщо побудувати всі доріг, усі міста стануть сусідами;

  2. ( балів) n,m \leq 10;

  3. ( балів) n,m \leq 10^5; c_i = 1;

  4. ( балів) n,m \leq 10^5; усі w_i однакові;

  5. ( балів) n,m \leq 10^3;

  6. ( балів) n,m \leq 10^5;

  7. ( балів) n,m \leq 5 \cdot 10^5;

  8. ( балів) без додаткових обмежень.