Familia bunicului Gepetto este foarte numeroasă, fiind formată din el însuși și din descendenți ai acestuia (copii, nepoți, stră-nepoți, stră-stră-stră-nepoți, etc.).
Deoarece Gepetto nu poate reține numele tuturor membrilor familiei sale, el a atribuit fiecăruia dintre aceștia (inclusiv lui însuși) câte un număr unic între și .
În plus, deoarece Gepetto nu se înțelege bine cu rudele sale prin alianță, el ține minte pentru fiecare persoană doar cine este părintele său care este la rândul său un descendent al lui Gepetto. Pentru fiecare , fie numărul asociat părintelui persoanei . Considerăm că numărul asociat părintelui lui Gepetto este .
De ziua copilului, Gepetto vrea să le ofere tuturor membrilor familiei sale (inclusiv lui însuși) câte un cadou, însă este frământat de ordinea în care să ofere cadourile. O ordine de oferire a cadourilor poate fi reprezentată ca o permutare , cu semnificația că:
- Gepetto va oferi primul cadou persoanei cu numărul ;
- Gepetto va oferi al doilea cadou persoanei cu numărul ;
- Gepetto va oferi ultimul cadou persoanei cu numărul .
Gepetto consideră că o ordine de oferire a cadourilor este bună dacă fiecare persoană din familie își va primi cadoul mai devreme decât toți copiii săi.
După ce a ales o ordine bună de oferire a cadourilor , Gepetto se întreabă totuși pe ce poziție s-ar afla această ordine în șirul sortat lexicografic al tuturor ordinilor bune de oferire a cadourilor.
Deoarece această poziție poate fi foarte mare, Gepetto este mulțumit și cu restul acesteia modulo .
O ordine este mai mică lexicografic decât o altă ordine dacă există o poziție () pentru care:
- , pentru toți indicii care satisfac ;
- .
Detalii de implementare
Va trebui să implementezi funcția
int solve(int N, std::vector<int> P, std::vector<int> V)
care primește ca parametri:
- , numărul de membri ai familiei.
- , vector indexat de la unde reprezintă părintele persoanei pentru oricare .
- , o permutare a numerelor , reprezentând ordinea de dăruire a cadourilor aleasă de Gepetto.
Funcția va returna un singur număr întreg, reprezentând indicele permutării în șirul sortat lexicografic modulo .
Restricții și precizări
- Se garantează că există exact un pentru care . Acest este numărul asociat lui Gepetto.
- Se garantează că graful format din toate muchiile este un arbore (un graf neorientat aciclic).
- Se garantează că fiecare număr de la la apare o singură dată în șirul . În alte cuvinte, se garantează că șirul este o permutare de ordin .
| # | Punctaj | Restricții |
|---|---|---|
| 1 | 7 | |
| 2 | 16 | |
| 3 | 22 | |
| 4 | 11 | Există un nod cu copii |
| 5 | 27 | |
| 6 | 17 | Fără restricții suplimentare. |
Exemplul 1
input
6
3 3 0 3 3 3
3 4 6 1 2 5
output
67
Explicație
Arborele genealogic din primul exemplu:

Exemplul 2
input
10
4 9 9 0 1 4 9 4 4 8
4 6 1 8 5 10 9 3 7 2
output
5158
Explicație
Arborele genealogic din al doilea exemplu:
