Cerință
Se dă un arbore cu noduri și un set de noduri importante. Putem efectua operații de distrugere astfel: alegem un nod , iar în urma operației nodul și toți vecinii săi direcți sunt eliminați din arbore (operația nu se propagă mai departe).
Se cere să determinăm numărul minim de operații necesare pentru a distruge toate nodurile neimportante, fără ca vreun nod important să fie distrus.
Date de intrare
Prima linie conține un număr întreg , reprezentând numărul de teste.
Pentru fiecare test:
- Prima linie conține două numere întregi și , unde este numărul de noduri al arborelui, iar este numărul de noduri importante.
- A doua linie conține numere întregi distincte, reprezentând indicii nodurilor importante.
- Următoarele linii conțin câte două numere întregi și , reprezentând o muchie a arborelui între nodurile și .
Date de ieșire
Pentru fiecare test, se va afișa pe o singură linie un număr întreg: numărul minim de operații necesare pentru a distruge toate nodurile neimportante, fără a distruge vreun nod important sau -1 daca nu este posibil.
Restricții și precizări
- ,
- Toate testele respectă proprietățile unui arbore (conex, aciclic).
- Nodurile sunt numerotate de la la .
- Pentru teste valorand de puncte,
Exemplul 1
stdin
5
5 1
3
1 2
2 3
3 4
4 5
8 1
4
1 2
3 2
5 3
2 4
5 6
4 8
7 8
3 1
2
1 2
2 3
3 3
1 2 3
1 2
2 3
3 0
1 2
2 3
stdout
2
3
-1
0
1
Explicație
In primul exemplu, avem un arbore-linie , unde nodul este important.
Operații posibile:
- Distrugem nodul se elimină și ;
- Distrugem nodul se elimină și .
Nodul (important) rămâne neatins, iar toate celelalte noduri sunt distruse.
Număr minim de operații: .