Se consideră un graf neorientat având iniţial N noduri izolate numerotate de la 1 la N (deci graful are iniţial 0 muchii). Asupra acestui graf se pot efectua 4 tipuri de operaţii, precum adăugarea unei muchii noi, ştergerea unei muchii şi două tipuri de interogări. Există însă o constrângere: la orice moment de timp, componentele conexe ale grafului trebuie să aibă structura unui drum (adică fiecare nod are cel mult 2 vecini şi graful nu conţine cicluri). Cele 4 tipuri de operaţii sunt următoarele:
- Tipul
1: Adaugă o muchie între nodurileişij. Această operaţie se efectuează cu succes dacă nu încalcă constrâgerea. În caz contrar, operaţia nu va fi efectuată. - Tipul
2: Elimină muchia dintre nodurileişij. Această operaţie se efectuează cu succes dacă există muchie între nodurileişij. - Tipul
3: Determină toate nodurile aflate la distanţăDde noduli. Distanţa dintre două noduri este egală cu numărul minim de muchii al unui drum în graf ce uneşte cele două noduri. Din cauza constrângerii, pot exista cel mult două noduri la distanţăDfaţă de un alt nod. - Tipul
4: Determină nodurile-capăt ale drumului (componentei conexe) din care face parte noduli(iar putea fi chiar unul din capete sau singurul capăt, dacă el este un nod izolat).
Cerinţă
Dându-se o secvenţă de M operaţii şi pornind de la un graf fără nicio muchie, afişaţi rezultatul fiecărei operaţii din secvenţă (în ordinea în care acestea sunt date).
Date de intrare
Fişierul de intrare drumuri.in conţine:
- Pe prima linie numerele
NşiMseparate, printr-un spaţiu. - Pe fiecare din următoarele
Mlinii este descrisă o operaţie, printr-o succesiune de numere întregi separate prin spaţii. Primul număr de pe linie reprezintă tipul operaţiei (de la1la4). - Dacă operaţia este de tipul
1, atunci urmează două numere întregiişij, având semnificaţia că se va adăuga o muchie între nodurileişijdin graf (dacă nu se încalcă constrângerea). - Dacă operaţia este de tipul
2, atunci urmează două numere întregiişij, având semnificaţia că se va şterge muchia dintre nodurileişijdin graf (dacă există). - Dacă operaţia este de tipul
3, atunci urmează două numere întregiişiD, având semnificaţia că se doreşte determinarea tuturor nodurilor aflate la distanţă exactDde noduli. - Dacă operaţia este de tipul
4, atunci urmează un singur număr întregi, având semnificaţia că dorim să determinăm capetele drumului din care face parte noduli.
Date de ieşire
Fişierul de ieşire drumuri.out va conţine M linii. A i-a linie va conţine rezultatul celei de-a i-a operaţii din fişierul de intrare. Dacă operaţia este de tipul 1 sau 2, rezultatul său este 1, dacă operaţia s-a efectuat cu succes, sau 0, în caz contrar. În cazul operaţiilor de tipul 3 şi 4, rezultatul constă dintr-o mulţime de noduri. Afişaţi mai întâi numărul de noduri din mulţime, apoi, pe aceeaşi linie, elementele mulţimii în ordine crescătoare.
Restricţii şi precizări
1 ≤ N ≤ 40 0001 ≤ M ≤ 400 0000 ≤ D ≤ N-11 ≤ i, j ≤ N- Nu se vor adăuga muchii de la un nod la el însuşi.
- Pentru
40%din testeN ≤ 5000şiM ≤ 20 000.
Exemplu
drumuri.in
6 14
1 2 4
1 6 5
4 1
1 1 5
1 1 6
4 5
3 6 1
4 4
4 3
3 3 1
3 3 0
2 3 2
2 5 6
3 6 1
drumuri.out
1
1
1 1
1
0
2 1 6
1 5
2 2 4
1 3
0
1 3
0
1
0
Explicaţii
Graful are N=6 noduri şi se dau M=14 operaţii:
- Se adaugă muchie între nodurile
2şi4cu succes. - Se adaugă muchie între nodurile
6şi5cu succes. - Nodul
1face parte dintr-un drum cu un singur nod:1. - Se adaugă muchie între nodurile
1şi5cu succes. - Adăugarea muchiei între nodurile
1şi6eşuează, deoarece s-ar forma un ciclu în graf. - Nodul
5face parte dintr-un drum cu2capete:1şi6. - Există un singur nod la distanţă
1de nodul6: nodul5. - Nodul
4face parte dintr-un drum cu2capete:2şi4. - Nodul
3face parte dintr-un drum cu un singur nod:3. - Există zero noduri la distanţă
1de nodul3. - Există un singur nod la distanţă
0de nodul3: nodul3. - Ştergerea muchiei dintre nodurile
3şi2eşuează, deoarece această muchie nu există. - Ştergerea muchiei dintre nodurile
5şi6se efectuează cu succes. - Există zero noduri la distanţă
1de nodul6.