Cerință
Se dau , un șir de elemente și un arbore cu noduri, înrădăcinat în nodul . Există un șir ascuns de elemente.
Definim o operație "adună" pe un nod astfel:
- Fie mulțimea tuturor frunzelor din subarborele lui ;
- Veți alege un , iar pentru toți , se va face operația ;
Operația "adună" se poate face doar pe un nod "activ".
Definim costul unui șir astfel:
- Inițial, ;
- Pentru fiecare nod pe care vrem să îl activăm, ;
- Costul final va fi ;
De exemplu, pentru un arbore cu noduri, având muchiile 1 2
, 2 3
și 2 4
, șirul și șirul , dacă adăugăm la cost pentru a activa nodul , la frunzele și putem adăuga -2
la și , apoi -1
, șirul final fiind .
Care este costul minim pe care îl putem obține astfel încât pentru orice șir , după ce aplicăm niște operații "aduna", pentru orice frunză avem , dacă inițial toate nodurile sunt inactive?
Date de intrare
Pe prima linie se va găsi numărul natural . Pe doua linie se vor afla numere naturale, a -a valoare reprezentând , pentru . Pe următoarele linii se vor afla muchiile arborelui.
Dacă folosiți citire cu std::cin
, vă recomandăm să adăugați aceste linii la începutul programului:
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
Date de ieșire
Pe prima linie se va găsi un singur număr întreg, costul minim.
Restricții și precizări
- ;
- , pentru ;
# | Punctaj | Restricții |
---|---|---|
1 | 4 | Arborele este lanț și există muchie de la la , |
2 | 8 | Arborele este lanț |
3 | 5 | Arborele este stea |
4 | 12 | |
5 | 17 | |
6 | 54 | Fără alte restricții |
Exemplul 1
stdin
6
1 10 6 9 2 3
1 2
1 3
1 4
3 5
3 6
stdout
15
Explicație
Se vor activa nodurile . Dacă ar fi activate doar nodurile , atunci pentru șirul , nu se poate ajunge în același timp la valori nule pe pozițiile , respectiv .
Exemplul 2
stdin
6
1 10 2 9 2 3
1 2
1 3
1 4
3 5
3 6
stdout
14
Explicație
Se vor activa nodurile .