Po veľkom úspechu pri stavbe druhého slovenského mrakodrapu v Kokave nad Rimavicou sa dcérska firma Trojstenu (ktorá sa zaoberá cestnými stavbami) rozhodla pustiť do stavby ciest. Keďže zamestnanci v tejto firme sú výrazne lepší programátori ako robotníci, tak sa nejaké cesty síce postavili, ale iba tak veľmi náhodne. Čo je ešte horšie, všetky postavené cesty sú iba jednosmerné, na druhý smer sa trochu zabudlo.
To sa ľuďom ani trochu nepáčilo a teda sa začali búriť. Aby vedenie Trojstenu upokojilo situáciu, rozhodlo sa sľúbiť ľuďom, že označí postavené cesty tak, aby z každého mesta viedla aspoň jedna cesta. Bohužiaľ, tento nerozvážny sľub vedenie dalo pred tým, než si overili, že to je možné.
Keďže všetci v Trojstene sa vybrali otáčať cedule na cestách, tak neostal nikto, kto by vlastne zistil, či je ich možné pootáčať tak aby splnili sľub. Vedeli by ste to zistiť vy?
Máme cestnú sieť, ktorá sa skladá z miest a ciest medzi nimi. Tieto cesty sú všetky jednosmerné a vašou úlohou je zistiť, či ich vieme orientovať tak, aby z každého mesta išla von aspoň jedna cesta. Každá cesta spája vždy práve dve mestá, nemôže ísť z mesta do toho istého mesta a medzi dvomi mestami vedie vždy najviac jedna cesta.
V prvom riadku vstupu sú dve medzerou oddelené čísla $n, m$ ($1 \leq n \leq 10^6$, $0 \leq m \leq 10^6$) počet miest a počet ciest.
Nasleduje $m$ riadkov, na každom sú dve medzerou oddelené čísla $a,b$ ($0 \leq a,b < n, a \neq b$), ktoré hovoria, že mestá $a$ a $b$ sú spojené cestou. Mestá sú označené číslami od $0$ po $n-1$.
V jednotlivých sadách platia nasledujúce obmedzenia:
| Sada | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| $1 \leq n \leq$ | $20$ | $100$ | $1\,000$ | $100\,000$ |
| $1 \leq m \leq$ | $40$ | $10\,000$ | $1\,000\,000$ | $1\,000\,000$ |
Vypíšte jediný riadok, na ktorom je buď text ano, ak
vieme orientovať cesty tak, aby z každého mesta viedla aspoň jedna
cesta. Ak to nejde, vypíšte nie.
Input:
3 3
0 1
1 2
2 0
Output:
ano
V tomto prípade vieme napríklad orientovať cesty tak, že cesty
idú 1 -> 0, 0 -> 2 a
2 -> 0.
Input:
4 3
0 1
1 2
2 0
Output:
nie
Podobný prípad, ale máme o jedno mesto naviac (mesto 3). Z tohoto mesta žiadna cesta vychádzať nemôže, keďže na žiadnej ceste nie je.
Input:
4 2
0 1
2 3
Output:
nie
Nech orientujeme cesty akokoľvek, nevieme zariadiť, aby zo všetkých miest vychádzala aspoň jedna cesta.
Input:
6 6
0 1
1 2
2 0
3 4
4 5
5 3
Output:
ano
Ak cesty orientujeme ako 0 -> 1,
1 -> 2, 2 -> 0, 3 -> 4,
4 -> 5, 5 -> 3, tak z každého mesta
vychádza aspoň jedna cesta.
Korešpondenčný seminár z programovania zastrešuje občianske združenie Trojsten.
Trojsten, o.z.
FMFI UK, Mlynská dolina
842 48 Bratislava
Programátorská súťaž pre základoškolákov
Materiály a úlohy na výučbu programovania
Intenzívny programátorský zážitok v lete