Evacuare

Time limit: 0.5s Memory limit: 64MB Input: evacuare.in Output: evacuare.out

Ca să ia o binemeritată pauză de la curățenie, Hetty s-a dus în excursie la Praid, ca să viziteze salina din oraș. Aceasta este formată din NN încăperi legate între ele prin MM tuneluri bidirecționale. Hetty a observat că în fiecare încăpere i (1iN)i \ (1≤i≤N) a fost plasat un semn pe care este scris numărul PiP_i al încăperii spre care trebuie să se îndrepte vizitatorii în cazul unei evacuări de urgență. Astfel, spunem că o încăpere ii poate fi evacuată printr-o încăpere kk dacă și numai dacă una din
următoarele propoziții este adevărată:

  1. Încăperea ii este chiar camera care conține ieșirea (i=k)(i=k)
  2. Încăperea PiP_i se poate evacua prin încăperea kk și există un tunel direct între încăperile ii și PiP_i.

În acest moment se știe că toate încăperile din salină pot fi evacuate prin camera XX. Acest lucru este însă pe cale să se schimbe, întrucât proprietarii salinei doresc să închidă ieșirea din încăperea XX și să deschidă o alta într-o încăpere YY. Întrucât salina să poată fi redeschisă, proprietarii trebuie să schimbe unele dintre semnele PiP_i. Un semn dintr-o încăpere ii trebuie schimbat dacă numărul PiP_i înscrisă pe el trebuie modificat pentru ca încăperea ii să poată fi evacuată prin încăperea YY. Hetty se întreabă acum care este numărul minim de semne care trebuie schimbate pentru a putea evacua toate încăperile salinei prin încăperea YY, pentru fiecare YY între 11 și NN.

Date de intrare

Fișierului de intrare evacuare.in conține pe prima linie 33 numere naturale, N,M,N, M, și XX reprezentând numărul de încăperi, numărul de tunele din salină, respectiv camera care conține inițial ieșirea. Pe următoarele MM linii se vor afla câte două numere naturale, reprezentând o pereche de camere care sunt unite printr-un tunel direct. Pe ultima linie se vor afla NN numere naturale. Al ii-lea dintre acestea reprezintă numărul PiP_i înscris pe semnul aflat în camera ii.

Date de ieșire

In fișierul de ieșire evacuare.out se vor afișa NN linii. Linia ii va conține numărul minim de semne care trebuiesc schimbate pentru ca salina să poată fi evacuată prin camera ii.

Restricții și precizări

  • 2N500 0002 ≤ N ≤ 500 \ 000
  • 1M600 0001 ≤ M ≤ 600 \ 000
  • Pentru 20%20\% din teste M=N1M = N-1.
  • Pentru 30%30\% din teste 2N2 0002 ≤ N ≤ 2 \ 000
  • Nu există un tunel care să lege o cameră de ea însăși.

Exemplu

evacuare.in

4 4 3
1 2
2 3
2 4
3 4
2 3 4 3

evacuare.out

2
1
0
0

Explicație

Pentru a evacua salina prin încăperea 11, va trebui să schimbăm numărul P2P_2 din 33 în 11 și P3P_3 din 44 în 22.

Astfel, putem evacua cele 44 încăperi pe rutele:

  • 1:11: 1
  • 2:212: 2 → 1
  • 3:3213: 3 → 2 → 1
  • 4:43214: 4 → 3 → 2 → 1

Observăm că am putea schimba și P4P_4 în 22 pentru a evacua încăperea 44 pe ruta 4214 → 2 → 1 însă această variantă nu duce la număr minim de semne schimbate.

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