kdist

Time limit: 0.6s Memory limit: 128MB Input: kdist.in Output: kdist.out

Cerință

Bujorel s-a apucat de pomicultură şi a însămânţat un arbore (graf conex aciclic) cu NN noduri, fiecare nod având o culoare dată dintr-un interval [1,K][1, K]. Acum, după ce arborele a crescut, el doreşte să ştie, pentru fiecare culoare, suma distanţelor dintre toate perechile de noduri ale arborelui ce au culoarea respectivă. Distanţa dintre două noduri se defineşte ca fiind numărul de muchii de pe drumul dintre cele două noduri.
Deoarece Bujorel a folosit foarte mult îngrăşământ la plantarea arborelui, acesta a crescut foarte mult şi voi trebuie să scrieţi un program care calculează suma distanţelor dintre nodurile cu aceeaşi culoare.

Date de intrare

Pe prima linie a fişierului kdist.in se află două numere naturale NN şi KK, numărul de noduri ale arborelui, respectiv numărul de culori în care sunt vopsite nodurile. Pe următoarele N1N-1 linii este descris arborele, fiecare linie conţinând două numere naturale xx şi yy, reprezentând o muchie dintre nodul xx şi nodul yy. În continuare sunt prezente NN linii, a i-a dintre aceste linii având un număr întreg c aparţinând intervalului [1,K][1, K] reprezentând culoarea nodului ii.

Date de ieșire

Fişierul kdist.out va conţine KK linii, cea de-a i-a linie conţinând suma distanţelor dintre toate perechile de noduri ce au culoarea ii.

Restricții și precizări

  • 1KN200 0001 \leq K \leq N \leq 200 \ 000
  • În calcularea sumei distanţelor dintre nodurile cu aceeaşi culoare, fiecare pereche de noduri (x,y)(x, y) va fi considerată o singură dată.

Exemplu

kdist.in

6 3
1 2
1 3
3 4
3 5
5 6
1
2
2
1
2
3

kdist.out

2
6
0

Explicație

Pentru culoarea 11 avem o pereche: (1,4)(1, 4), cu distanţa 22
Pentru culoarea 22 avem 3 perechi: (2,3)(2, 3) cu distanţa 22, (2,5)(2, 5) cu distanţa 33 si (3,5)(3, 5) cu distanţa 11.
Pentru culoarea 33 avem un singur nod cu această culoare, deci răspunsul este 00.

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