Zoznam úloh

4. Koľko strihaní potrebujeme?

Kolo už skončilo. Môžeš si pozrieť vzorové riešenie.

Pokojne sedíte vo svojej kancelárii a vychutnávate si kávu. Ste radi, že vás práve povýšili na CEO celoštátnej firmy „Kolosálne Spojenie Psikov“ a užívate si výhľad zo svojho okna. Spomínate si, ako ste začínali pracovať pre túto firmu, ktorá rozdeľuje elektrinu do všetkých miest nášho milovaného štátu. Pamätáte si výstavbu masívnej elektrárne a pokladanie káblov medzi našimi malebnými mestami.

Zrazu začujete krik a do vašej kancelárie vbehne vaša sekretárka Miška s desivou správou: gigantická elektráreň má problémy a jej produkcia elektriny kolíše. To môže viesť k preťaženiu siete a následným explóziám rozvodných staníc. Vypnúť elektráreň nie je možné, pretože by to zruinovalo vašu firmu. Našťastie vás napadne riešenie:

Každé mesto má rozvodnú stanicu, ktorú viete na diaľku vypnúť. Tým odpojíte mesto od siete, čím riskujete kritiku. Aby ste predišli kolapsu, potrebujete vypínať mestá v takom poradí, že ak odpojíte od siete prvých $j$ miest v poradí, všetky zvyšné mesta zostanú spojené s elektrárňou.

Úloha

Elektrická sieť pozostáva z $n$ miest, očíslovaných od $0$ po $n-1$, $m$ káblov a práve jednej elektrárne, ktorá sa nachádza v meste $k$. Elektrina prúdi od elektrárne do všetkých miest, do ktorých sa z nej dá dostať káblom (káble vedia prenášať energiu obojsmerne).

Keď vypneme mesto od elektriny, vypneme všetky káble ktoré cez neho vedú, a teda cez neho nesmie ani prúdiť elektrina do iných miest.

Nájdite postupnosť v ktorej vieme odpájať mestá od elektriny, tak aby pre každé $1 \leq j \leq n$ platilo, že ak od elektriny odpojíme prvých $j$ miest, neovplyvníme tak elektrinu do zvyšných $n-j$ miest.

Všimnite si, že ak od elektriny odpojíte mesto s elektrárňou, do ďalších miest už elektrina ísť nevie (nemá odkiaľ).

Formát vstupu

  • Prvý riadok obsahuje čísla $1 \leq n \leq 10^5$ (počet miest), $0\leq m \leq \min(2\cdot 10^5, \frac{n(n-1)}{2})$ (počet káblov) a $0\leq k\leq n - 1$ (číslo mesta s elektrárňou), oddelené medzerou.

  • Nasleduje $m$ riadkov s dvojicami čísel $0\leq a_i\neq b_i\leq n-1$ oddelených medzerou, označujúcich, že medzi mestami $a_i$ a $b_i$ sa nachádza kábel.

Je garantované, že v zadanej elektrickej sieti má každé mesto prístup k elektrine.

Formát výstupu

Vypíšte jeden riadok v ktorom sa nachádza $n$ medzerami oddelených čísel: postupnosť v ktorom vieme odpájať mestá od elektriny.

V prípade, že existuje viac postupností, vypíšte ľubovoľnú.

Malé varovanie

V prípade, že používate python a rekurziu, nezabudnite, že prednadstavený limit rekurzie v pythone je $1000$, a pre väčšie hĺbky ju treba manuálne nastaviť v programe cez sys.setrecursionlimit.

Bodovanie a obmedzenia

Existujú štyri testovacie sady, každá za dva body, v ktorých platia nasledovné obmedzenia:

Sada 1 2 3 4
$1 \leq N \leq$ $10$ $10^5$ $200$ $10^5$
$1 \leq M \leq$ $45$ $10^5$ $1\,000$ $2\cdot 10^5$

Zároveň, v druhej sade navyše platí, že každé mesto je prepojené káblami s práve dvoma inými mestami.

Príklady

Input:

3 3 1
0 1
1 2
2 0

Output:

0 2 1

Tento vstup by sa mohol nachádzať v druhej sade. Keď odpojím od energie mesto číslo $0$, elektrina vie medzi elektrárňou (v meste $1$) a mestom $2$ prúdiť cez priamy kábel. Keď následne odpojíme mesto $2$, v meste $1$ stále je elektrina, lebo sa v ňom nachádza elektráreň. Napokon, keď vypneme elektráreň, ovplyvní to len to mesto, v ktorom sa nachádza.

Input:

3 2 2
0 1
1 2

Output:

0 1 2

Všimnite si, že nemôžeme najskôr odpojiť mesto $1$, keďže jediný spôsob, akým sa elektrina vie dostať do mesta $0$ je cez mesto $1$.

Input:

2 1 0
0 1

Output:

1 0

Nemáme na výber. Najskôr musíme vypnúť elektrinu v meste bez elektrárne

Input:

1 0 0

Output:

0

Máme jediné mesto, v ktorom je elektráreň.

Input:

8 11 2
1 0
2 0
1 6
7 1
6 7
2 6
3 2
4 5
5 2
3 4
2 1

Output:

0 7 6 1 5 4 3 2

Je možné že pre nejaký vstup existuje viacero správnych riešení. Akékoľvek z nich bude akceptované.

Pre odovzdávanie sa musíš prihlásiť.
Trojsten

Korešpondenčný seminár z programovania zastrešuje občianske združenie Trojsten.

Kontakt
Ďalšie projekty