Олимпиадный тренинг

Задача . Barn Tree


Задача

Темы:
Обратите внимание: время на тест для этой программы 4 сек, в два раза больше чем обычно. Ограничение по памяти также в два раза выше чем обычно.**

На ферме Джона имеется \(N\) амбаров (\(2 \leq N \leq 2\cdot 10^5\)) пронумерованных \(1 \dots N\). Имеется \(N-1\) дорог, где каждая дорога соединяет два амбара и от любого амбара до любого другого можно добраться посредством некоторой последовательности дорог. В \(j\)-ом амбаре имеется \(h_j\) снопов сена (\(1\le h_j\le 10^9\)).

ФД хочет переместить сено так, чтобы в каждом амбаре было одинаковое количество стогов. Он может выбрать любую пару амбаров соединённых дорогой и перевезти некоторое целое количество снопов сена меньшее ли равное количеству снопов в первом амбаре из первого амбара во второй.

Определите последовательность действий ФД, чтобы добиться цели за минимальное количество действий. Гарантируется, что такая последовательность существует.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка ввода содержит значение \(N.\)

Вторая строка ввода содержит разделённые одиночным пробелами значения \(h_j\) для \(j = 1 \dots N\).

Каждая из последних \(N-1\) строк ввода содержи два разделённых одиночным пробелами числа \(u_i \ v_i\), указывающих, что имеется двунаправленная дорога, соединяющая амбары \(u_i\) и \(v_i\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите минимальное количество действий, за которым следует последовательность этих действий по одному в строке.

Каждое действие описывается тремя разделёнными одиночными пробелами положительными целыми числами: амбар-источник, амбар-приёмник, количество снопов сена, перевозимых из источника в приёмник.

Если имеется множество решений, выводите любое.


Примеры
Входные данныеВыходные данные
1 4
2 1 4 5
1 2
2 3
2 4
3
3 2 1
4 2 2
2 1 1

time 500 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
Комментарий учителя