Zoznam úloh

8. Ideme budovať

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

Rímska ríša je známa svojimi cestnými sieťami. Ale aby si mohli zachovať slávu, treba ich samozrejme pravidelne opravovať. A kto iný by ich opravoval, keby nie plebejci? Existuje $p$ tímov plebejcov, rozmiestnených po rôznych mestách ríše, pričom treba, aby o $k$ dní išli opravovať cesty v nejakých iných $p$ mestách ríše. Samozrejme, ako Patricij stojaci v čele Koordinácie Siete Plebejcov nemôžeš dovoliť, by sa proti tebe plebejci spolčili. Preto by nikdy nemali dva opravárske tímy ostávať v jednom meste.

Tímy vedia putovať iba po cestách, pričom prechod jednou cestou trvá deň, alebo môžu zostávať v meste v ktorom sú. Zistite, či sa po $k$ dňoch vedia prepraviť tam, kam treba.

Úloha

Rímsku cestnú sieť tvorí $n$ miest ktoré spája $m$ ciest. Cesty sa nekrižujú, sú obojsmerné a medzi mestami sa dá dostať iba po cestách, pričom prejsť každú cestu trvá jeden deň.

V $p$ rôznych mestách $a_1, \dots, a_p$ je rozmiestnených $p$ opravárskych tímov. Potrebujeme, aby po $k$ dňoch tímy pôsobili v mestách $b_1,\dots,b_p$, pričom nám nezáleží na tom, ktorý tím skončí v ktorom meste.

Tímy sa vedia presúvať nasledovne: každý deň sa tím buď presunie jednou cestou do susedného mesta, alebo ostane na mieste. Na konci žiadneho dňa nemôžu dva rôzne tímy skončiť v jednom meste (môžu však okolo seba prejsť po ceste).

Zistite, či po $k$ dňoch vedia tímy skončiť v mestách $b_1, \dots, b_p$ a ak áno, ako.

Formát vstupu

V prvom riadku vstupu sú štyri čísla oddelené medzerou: $1\leq n, m, p, k$. Vo všetkých vstupoch platí $p\leq n \leq 1\,000$, $m\leq \max(1\,000, \frac{n(n-1)}{2})$ a $k\leq 50$.

Na druhom riadku vstupu sa nachádza $p$ medzerou oddelených čísel: $a_1,a_2, \dots, a_p$ - pôvodné rozmiestnenie tímov. Je garantované, že sú všetky navzájom rôzne.

Na treťom riadku vstupu sa nachádza $p$ medzerou oddelených čísel: $b_1,b_2 \dots, b_p$ - požadované rozmietnenie tímov. Je garantované, že sú všetky navzájom rôzne.

Na ďalších $m$ riadkoch sa nachádza popis ciest. Popis cesty pozostáva z dvoch medzerou oddelených čísel miest, ktoré cesta spája. Je garantované, že každá cesta spája dve rôzne mestá, a žiadnu dvojicu miest nespájajú dve rôzne cesty.

Mestá číslujeme od $1$ po $n$.

Existujú $4$ testovacie sady. V nich navyše existujú nasledujúce obmedzenia:

  • V prvej sade platí, že cesty môžu viesť iba medzi mestami $i$ a $i + 1$ (nie všetky takéto cesty však musia existovať).
  • V druhej sade platí $p = 1$
  • V tretej sade platí $k = 1$.

Formát výstupu

Na prvom riadku vypíšte buď ANO (ak je možné po $k$ dňoch dostať tímy na požadované miesta) alebo NIE (ak to možné nie je).

V prípade, že vypíšete ANO, vypíšte ďalších $p$ riadkov, každý z nich obsahujúci $k$ čísel oddelených medzerou. Na $i$-tom riadku vypíšte pohyb tímu, ktorý začínal v meste $a_i$. Formálne teda $k$ čísel, $j$-te z nich reprezentuje mesto, v ktorom sa $i$-ty tím nachádzal po $j$-tom dni.

Príklady

Vstup

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

Výstup

ANO
5
2

Všimnime si, že tím ktorý začínal na pozícii $a_1 = 1$ skončí na pozícii $b_2 = 5$. Tento vstup by sa mohol objaviť v tretej sade.

Vstup

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

Výstup

NIE

Aby sa tímy dostali na koncové pozície, potrebovali by sa oba po prvom dni nachádzať v vrchole číslo $1$. Keďže to ale nemôžu odpoveď je NIE.

Ak by však mali na presun $3$ dni, išlo by to napríklad tak, že by prvý tím prvý deň ostal na mieste.

Vstup

10 10 4 2
2 5 6 7
5 4 10 2
1 2
2 3
3 1
4 5
5 6
6 7
7 8
8 9
9 10
10 4

Výstup

ANO
2 2
4 10
5 4
6 5

Jedno z možných riešení. Všimnite si, že cestná sieť nemusí byť spojitá.

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