Arbquery

Time limit: 0.8s Memory limit: 256MB Input: arbquery.in Output: arbquery.out

Manuela are un arbore cu NN noduri, unde fiecare muchie are câte o lungime. Un lanţ este o secvenţă de noduri distincte x1,,xkx_1, \dots, x_k, astfel încât să existe câte o muchie între oricare două noduri adiacente. Numim lungimea unui lanţ x1,...,xkx_1, ..., x_k suma lungimilor muchiilor care unesc nodurile adiacente din drum. Pentru fiecare muchie (x,y)(x, y) fie d(x,y)d(x, y) suma lungimilor tuturor lanţurilor care conţin muchia de la xx la yy.

Cerință

Manuela are QQ interogări, fiecare de forma unui lanţ x1,,xkx_1, \dots, x_k. Ea vrea să afle suma d(x1,x2)+...+d(xk1,xk)d(x_1, x_2) + ... + d(x_{k-1}, x_k) modulo 109+7{10}^{9} + 7.

Date de intrare

Primul rând al fişierului de intrare arbquery.in conţine numerele NN şi QQ. Urmează N1N - 1 rânduri, fiecare conţinând trei valori xx, yy si ll, ce indică existenţa unei muchii de la xx la yy cu lungimea ll.

Urmează apoi QQ linii, fiecare conţinând două valori xx si yy, ce reprezintă o interogare asupra lanţului unic de la xx la yy.

Date de ieșire

Fişierul de ieşire arbquery.out conţine răspunsurile celor QQ interogări, în ordine.

Restricții și precizări

# Punctaj Restricții
1 10 N,Q20N, Q \leq 20, li105l_i \leq {10}^{5}
2 30 N,Q2 000N, Q \leq 2\ 000, li105l_i \leq {10}^{5}
3 10 N,Q100 000N, Q \leq 100\ 000, li105l_i \leq {10}^{5}, oricare nod are cel mult 2 muchii incidente
4 10 N,Q100 000N, Q \leq 100\ 000, li105l_i \leq {10}^{5}, cel mult un nod are mai mult de o muchie incidenta
5 40 N,Q100 000N, Q \leq 100\ 000, li105l_i \leq {10}^{5}

Exemplu

arbquery.in

3 3
1 2 1
2 3 100
1 2
2 3
1 3

arbquery.out

102
201
303

Explicație

Observăm că sunt trei lanţuri, 121 - 2 de cost 11, 232 - 3 de cost 100100 şi 1231 - 2 - 3 de cost 101101. Astfel d(1,2)=102d(1, 2) = 102, d(2,3)=201d(2, 3) = 201. Astfel rezultatul pentru 1 21 \ 2 este d(1,2)=102d(1, 2) = 102, pentru 2 32 \ 3 este d(2,3)=201d(2, 3) = 201, şi pentru 1 31 \ 3 este d(1,2)+d(2,3)=303d(1, 2) + d(2, 3) = 303.

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