Se dă un arbore cu noduri (numerotate de la la ) și considerăm muchiile sale numerotate de la la (în ordinea în care sunt date în input). Un arbore este un graf neorientat, conex și aciclic.
Fie o permutare a numerelor de la la . Pentru această permutare dată, atribuim fiecărei muchii de index o pondere egală cu . 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 la - ordinea de adăugare nu depinde de ponderi).
Pentru ca permutarea să fie considerată validă, la fiecare pas din algoritm se cere ca orice componentă conexă maximală (cu cel puțin 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 , reprezentând numărul de noduri din arbore, respectiv cele 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 ).
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:
- , numărul de noduri din arbore
- Șirurile și , unde perechea reprezintă capetele muchiei din arbore (după numerotarea din enunț), pentru de la la .
Funcția solve va fi apelată o singură dată.
Restricții
- , pentru
- Atenție: Doar numărul de permutări valide care au un număr minim de inversiuni se calculează modulo . Pentru numărul minim de inversiuni se calculează valoarea exactă.
| # | Punctaj | Restricții |
|---|---|---|
| 1 | 2 | și arborele dat are formă de stea (există un nod de grad ) |
| 2 | 4 | |
| 3 | 11 | |
| 4 | 13 | |
| 5 | 21 | și arborele este un lanț (toate nodurile au gradul cel mult ) |
| 6 | 22 | |
| 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 inversiuni sunt:
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 și există permutări valide cu acest număr minim de inversiuni.