Muchii Permutate

Time limit: 1.5s Memory limit: 512MB Input: Output:

Se dă un arbore cu NN noduri (numerotate de la 11 la NN) și considerăm muchiile sale numerotate de la 11 la N1N - 1 (în ordinea în care sunt date în input). Un arbore este un graf neorientat, conex și aciclic.

Fie PP o permutare a numerelor de la 11 la N1N - 1. Pentru această permutare PP dată, atribuim fiecărei muchii de index ii o pondere egală cu P[i]P[i]. Apoi, considerăm un algoritm în care inițial nu avem nicio muchie în arbore și începem să le adăugăm una cate una, în ordinea numerotării lor (practic în ordinea în care sunt date în input, de la 11 la N1N - 1 - ordinea de adăugare nu depinde de ponderi).

Pentru ca permutarea PP să fie considerată validă, la fiecare pas din algoritm se cere ca orice componentă conexă maximală (cu cel puțin 22 noduri) formată până acum să aibă doar muchii cu ponderi consecutive - aici componentele sunt considerate individual (și doar cele maximale), deci toate trebuie să respecte condiția, la orice pas al algoritmului.

Cerință

Dându-se numărul NN, reprezentând numărul de noduri din arbore, respectiv cele N1N - 1 muchii ale arborelui (în ordinea din enunț), să se determine numărul minim de inversiuni dintr-o permutare validă, precum și numărul de permutări valide care ating acest minim (modulo 109+710^9 + 7).

Detalii de implementare

Concurenții vor avea de implementat o singură funcție:

std::pair<long long, int> solve(int N, std::vector<int> U, std::vector<int> V);

care primește ca parametri:

  • NN, numărul de noduri din arbore
  • Șirurile UU și VV, unde perechea U[i],V[i]U[i], V[i] reprezintă capetele muchiei i+1i + 1 din arbore (după numerotarea din enunț), pentru ii de la 00 la N2N - 2.

Funcția solve va fi apelată o singură dată.

Restricții

  • 2N500 0002 \leq N \leq 500 \ 000
  • 1Ui,ViN1 \leq U_i, V_i \leq N, pentru 0iN20 \leq i \leq N - 2
  • Atenție: Doar numărul de permutări valide care au un număr minim de inversiuni se calculează modulo 109+710^9 + 7. Pentru numărul minim de inversiuni se calculează valoarea exactă.
# Punctaj Restricții
1 2 N200 000N \leq 200 \ 000 și arborele dat are formă de stea (există un nod de grad N1N - 1)
2 4 N10N \leq 10
3 11 N500N \leq 500
4 13 N5 000N \leq 5 \ 000
5 21 N200 000N \leq 200 \ 000 și arborele este un lanț (toate nodurile au gradul cel mult 22)
6 22 N200 000N \leq 200 \ 000
7 27 Fără restricții suplimentare.

Exemplul 1

input

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

stdout

2 2

Explicație

Pentru primul exemplu, cele două permutări valide optime care respectă constrângerile și obțin minimul de 22 inversiuni sunt:

  • P=(1,3,4,2,5,6)P = (1, 3, 4, 2, 5, 6)
  • P=(3,1,2,4,5,6)P = (3, 1, 2, 4, 5, 6)

Exemplul 2

input

20
16 17
4 5
8 9
11 12
18 19
1 2
14 15
7 8
19 20
6 7
15 16
3 4
12 13
9 10
2 3
17 18
5 6
10 11
13 14

output

48 8

Explicație

Pentru al doilea exemplu, numărul minim de inversiuni al unei permutări valide este 4848 și există 88 permutări valide cu acest număr minim de inversiuni.

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