Гільдія злодіїв
Limits: 3 sec., 512 MiB
В одному королівстві є n міст, з’єднаних n−1 дорогою так, що між кожною парою міст можливо добратись дорогами. Іншими словами, міста та дороги утворюють дерево.
У кожному місті є банк, в сховищі банку в місті v знаходиться av монет. В одному з міст зародилась гільдія злодіїв, яка планує пограбувати банки усього королівства. На жаль, король не знає в якому саме місті це сталось, тож для протидії великого пограбування він вирішив зробити усі дороги королівства односторонніми, попри те, що після цього уже неможливо дістатись з будь-якого міста в будь-яке інше.
Та все ж, пограбування відбудеться! Гільдія пограбує усі банки в усіх містах, в які можливо добратись від міста, де гільдія зародилась.
Король хоче обрати такі напрямки доріг, щоб мінімізувати максимальний можливий збиток. Більш формально, нехай cv – сума кількості монет у всіх містах, які досяжні з міста v після того, як король обере напрямок кожної дороги (включно з містом v). Тоді вам потрібно обрати напрямки так, щоб мінімізувати maxcv.
Input
В першому рядку задано єдине ціле число n – кількість міст королівства.
У наступному рядку задано n цілих чисел ai – кількість монет у банках.
i-ий з наступних n−1 рядків містить два цілі числа ui та vi, що означає, що між містами з цими номерами є дорога.
Output
Виведіть єдине число – мінімальне можливе значення maxcv.
Constraints
2≤n≤105,
1≤ai≤109,
1≤ui,vi≤n.
Samples
Input (stdin) | Output (stdout) |
---|---|
7 1 2 3 4 5 6 7 1 2 1 3 2 4 2 5 4 6 1 7 | 12 |
Input (stdin) | Output (stdout) |
---|---|
7 1 1 1 1 1 1 1 1 2 1 3 2 4 2 5 4 6 1 7 | 3 |
Input (stdin) | Output (stdout) |
---|---|
2 4 7 1 2 | 11 |
Notes
У першому приклад у вершині v знаходиться v монет. Можлива орієнтація ребер зображена на рисунку. Тоді якщо гільдія розташована у вершині 2, а отже вони можуть пограбувати банк у вершинах 1, 2, 4 та 5. c2=a1+a2+a4+a5=12. Для всіх інших вершин це значення є меншим.
У другому прикладі у кожній вершині по одній монеті. Один з варіантів, як орієнтувати ребра: