





Mistrzostwa Polski Szkół Średnich w Programowaniu Zespołowym 2024
Problem description
Janek podczas swojego startu w finale olimpiady informatycznej napotkał
następujące zadanie.
Dane jest drzewo o n
wierzchołkach. Każdy wierzchołek ma swoją wagę ai. Należy
znaleźć największą wartość ∑ii ⋅ api,
gdzie ciąg p1, p2, …, pn
oznacza dowolną kolejność odwiedzania wierzchołków przez algorytm
DFS.
Rozważmy następujący pseudokod:
p = []
odwiedzony = [0,0,...,0]
void dfs(v):
dodaj v na koniec p
weź dowolną permutację s wierzchołków u takich, że istnieje krawędź (u,v) oraz odwiedzony[u]==0
dla wszystkich u należących do s:
dfs(u)
Formalnie p1, p2, …, pn jest permutacją, która może powstać poprzez wywołanie funkcji dfs(s) dla dowolnego wierzchołka startowego s.
Jak już wiesz z któregoś z poprzednich zadań, Janek rozwiązał to zadanie z olimpiady bez problemu, czy Ty też dasz radę?
Wejście
W pierwszym wierszu znajduje się T, liczba przypadków
testowych.
Dla każdego przypadku testowego:
W pierwszym wierszu liczba całkowita n.
W drugim wierszu n dodatnich
liczb całkowitych a1, a2, …, an,
oznaczających wagi wierzchołków.
Potem w kolejnych n − 1
wierszach dwie liczby u i
v opisujące krawędź między
dwoma wierzchołkami w drzewie.
Graf na wejściu tworzy drzewo.
Wyjście
T wierszy, w każdym jedna liczba, odpowiedź do danego testu.
Ograniczenia
Liczba przypadków testowych spełnia 1 ≤ T ≤ 104
1 ≤ ni, ∑ini ≤ 2 ⋅ 105
1 ≤ ai ≤ 106
1 ≤ u ≠ v ≤ ni
Przykład
Wejście | Wyjście | Wyjaśnienie |
|
|
Dla pierwszego przypadku testowego poprawną kolejnością DFS dającą maksymalny wynik jest (2,4,1,6,5,3). |