Arborele frumos

Time limit: 2s Memory limit: 128MB Input: arborele_frumos.in Output: arborele_frumos.out

Ana are un arbore foarte frumos... Atât de frumos, încât încearcă să îl păstreze doar pentru ea. Cu toate acestea, Bogdan este un prieten foarte bun de-al Anei, și auzind de acest arbore frumos, a reușit să o convingă pe Ana să îi dezvăluie câteva noduri din acesta.

Arborele Anei este format din NN noduri, iar nodul ii din arbore are un coeficient de frumusețe viv_i. Ana îi va trimite lui Bogdan poze cu KK din cele NN noduri. Apoi, se va preface că acestea au fost șterse din arbore, împreună cu muchiile lor. Apoi, se va uita la fiecare componentă conexă rămasă, și va calcula suma coeficienților de frumusețe a nodurilor din ea. Pe urmă, se definește costul de selecție al celor KK noduri ca fiind valoarea maximă a acestor sume.

Cerință

Totuși, Ana își dorește ca, în continuare, părțile mai frumoase din arbore să rămână nevăzute. Din acest motiv, ea caută o selecție de exact KK noduri care să minimizeze costul de selecție. Nefiind așa de sigură de selecția optimă, aceasta vă transmite vouă o descriere legată de cum arată arborele, împreună cu coeficienții săi de frumusețe, și vă roagă să aflați costul de selecție minim, cât și o selecție care îl obține.

Date de intrare

Pe prima linie se află numerele NN și KK, cu semnificațiile descrise mai sus. Pe a doua linie se vor afla NN numere, al ii-lea reprezentând coeficientul de frumusețe al nodului ii. Pe următoarele NN linii, se vor afla două numere uu și vv, cu semnificația că există o muchie între nodurile uu și vv.

Date de ieșire

Pe prima linie programul trebuie să afișeze costul minim de selecție care se poate obține. Pe a doua linie, programul trebuie să afișeze KK numere, reprezentând nodurile din selecție. În cazul în care există mai multe selecții care obțin acest cost, se poate afișa oricare dintre ele.

Restricții și precizări

  • 1N1061 \leq N \leq 10^6
  • 0KN0 \leq K \leq N
  • 0vi1090 \leq v_i \leq 10^9
  • În cazul în care, după selectarea nodurilor nu mai există nicio componentă conexă, se consideră costul selecției ca fiind 00.
  • Pentru teste în valoare de 1616 puncte, N10N \leq 10.
  • Pentru alte teste în valoare de 3636 puncte, N1 000N \leq 1\ 000.
  • În cazul în care, costul corect este afișat, dar selecția afișată nu obține acest cost, se va acorda 50%50 \% din punctajul pe testul respectiv.

Exemplul 1

arborele_frumos.in

10 5
98 81 0 16 82 86 14 16 25 43
2 1
3 2
4 1
5 3
6 5
7 4
8 5
9 6
10 2

arborele_frumos.out

30
6 5 10 2 1

Explicație

În primul exemplu, o selecție de cost minim este cea formată din nodurile 11, 22, 55, 66, 1010. După ștergerea lor, rămân următoarele componente conexe:

  • componenta formată din nodurile 44 și 77, cu costul 3030;
  • componenta formată din nodul 33, cu costul 00;
  • componenta formată din nodul 88, cu costul 1616;
  • componenta formată din nodul 99, cu costul 2525.

Maximul dintre costuri este 3030.

Exemplul 2

arborele_frumos.in

10 0
77 21 22 64 90 29 62 34 25 24
2 1
3 1
4 1
5 4
6 2
7 4
8 2
9 5
10 2

arborele_frumos.out

448

Explicație

În al doilea exemplu, K=0K = 0, așadar nu vom selecta niciun nod. Costul selecției devine egal cu suma coeficienților de frumusețe din arbore, adică 448448.

Log in or sign up to be able to send submissions!