Злі корови#10664

Злі корови

6 секунд
256 мегабайтів
Середня

Останніми роками спостерігається швидке поширення Extremely Green Oxen Illness (EGOI) — хвороби, що робить корів небезпечними для туристів. Після кількох інцидентів було вирішено, що ми маємо відокремити райони, де пасуться корови, від районів, де ходять туристи.

У вас є карта Альп. На карті є районів. Кожен з районів може бути або населений коровами, або туристичним, або пустим. Деякі пари цих районів з'єднані двонаправленими дорогами. Кожна дорога має невід'ємну довжину. (Мовою теорії графів, карта — це неорієнтований граф із зваженими ребрами.)

Ви можете побудувати стіни в деяких районах. Як тільки ви будуєте стіну в районі, цей район стає недоступним для корів та туристів — вони більше не зможуть проходити через цей район.

Ваше завдання — вибрати набір районів, де будуть побудовані стіни. Цей набір районів має задовольняти наступні умови:

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

Для будь-якого району ми визначаємо його віддаленість як мінімальну довжину шляху між та деяким туристичним районом. (Довжина шляху — це сума довжин доріг. Зверніть увагу, що шлях може проходити через стіни та райони з коровами — бригада, що обслуговує стіну, має усі можливості та засоби, щоб здійснити такий рух.)

Віддаленість набору районів — це максимальна віддаленість будь-якого району в цьому наборі.

Серед усіх наборів районів зі стінами, що задовольняють усі наведені умови, знайдіть та поверніть набір із найменшою можливою віддаленістю. Якщо існує декілька таких наборів, поверніть будь-який із них.

Зверніть увагу, що кількість вибраних районів не грає ролі. Тобто, не обов'язково використовувати мінімальну кількість стін.

Вхідні дані

Перший рядок містить два цілі числа та (2 \leq n \leq 3 \cdot 10^5, n - 1 \leq m \leq 3 \cdot 10^5) — кількість районів та доріг відповідно. Райони пронумеровані від до .

Другий рядок містить цілих чисел t_1, \ldots, t_n, де t_i рівне , якщо -й район населений коровами, , якщо пустий, та , якщо це туристичний район.

Останні рядків описують дороги. -й із них містить три цілі числа a_j, b_j та \ell_j (1 \leq a_j < b_j \leq n, 0 \leq \ell_j \leq 10^9), що позначають дорогу між районами a_j та b_j довжини \ell_j.

Гарантується, що:

  • між будь-якими двома районами є не більше однієї дороги,

  • в даний момент можливо пройти між будь-якими двома районами, використовуючи або більше доріг,

  • існує щонайменше один район, населений коровами,

  • існує щонайменше один туристичний район.

Вихідні дані

Якщо неможливо побудувати стіни, як вказано в умові, виведіть -1.

Інакше перший рядок має містити число — кількість районів, де ви хочете побудувати стіни. Другий рядок має містити цілих чисел — номери районів, де ви хочете побудувати стіни. (Ці номери мають бути різними числами від до включно. Вони не обов'язково мають бути в певному порядку.)

Ваш вивід буде прийнятий, якщо набір підходить під умови та він із мінімальною віддаленістю.

Приклади

Приклад 1

Loading
Loading

Приклад 2

Loading
Loading

Приклад 3

Loading
Loading

Примітка

В усіх прикладах блакитний колір використовується для туристичних районів, коричневий — для районів, населених коровами, та оранжевий — для стін.

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

У другому прикладі віддаленість району рівна , віддаленість району рівна , оскільки це може бути досягнуто по шляху –––. (Нагадуємо, що бригади можуть проходити через стіни та райони з коровами.) Отже, ми маємо розмістити стіни в районах та (не ), і тоді віддаленість буде рівна .

Оцінювання

Блок ( балів): n \leq 10.

Блок ( бали): усі довжини \ell_j = 0.

Блок ( балів): існує рівно один туристичний район.

Блок ( балів): існує рівно n - 1 доріг (мовою теорії графів, заданий граф є деревом).

Блок ( балів): n, m \leq 2000 та усі довжини \ell_j = 1.

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