Se dă un arbore cu noduri numerotate de la la , cu rădăcina în nodul , și un vector , unde reprezintă valoarea nodului .
Un șir de lungime se numește permutare de ordin dacă acesta conține toate numerele de la la , în orice ordine. De exemplu, șirurile , și sunt permutări de ordin , dar șirurile și nu sunt.
Cerință
Se dau întrebări de tipul: Dacă am forma un șir cu toate valorile nodurilor din subarborele nodului , este acest șir o permutare de ordin , unde reprezintă numărul de noduri din subarborele nodului ?
Să se raspundă la aceste întrebări.
Date de intrare
Pe prima linie se găsește numărul natural . Pe următoarea linie, regăsim numere naturale, separate printr-un spațiu, reprezentând vectorul . Pe următoarea linie găsim perechi de numere naturale , separate printr-un spațiu, cu semnificația că există muchie între nodurile și . Pe următoarea linie, găsim numărul natural . Pe următoarele linii, regăsim nodurile , cu semnificația de mai sus.
Date de ieșire
Pe următoarele linii se vor regăsi mesajul DA
sau NU
, reprezentând răspunsurile la cele întrebări.
Restricții și precizări
- , pentru
-
# Punctaj Restricții 0 0 Exemplul 1 21 2 23 Arborele este un lanț 3 27 4 29 Fără alte restricții suplimentare
Observație
Datorită datelor de intrare foarte mari, se vor folosi instrucțiunile următoare la începutul funcției main()
în programul C++:
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
Exemplu
stdin
8
6 5 4 7 8 2 1 3
1 2
1 3
2 4
2 5
3 6
6 7
6 8
6
1
2
6
3
5
7
stdout
DA
NU
DA
DA
NU
DA
Explicație
Pentru prima întrebare, putem obține șirul , care este o permutare de ordin .
Pentru a doua întrebare, putem obține șirul , care nu este o permutare de ordin , deoarece nu conține toate numerele de la la .
Pentru ultima întrebare, obținem șirul , care este o permutare de ordin .