Prihlásenie Registrácia  

P - Polarizovaná spoločnosť

Časový limit: 2s, Pamäťový limit: 64MiB

Programovacie jazyky: Pascal, C, C++, Java, C++0x, Python 3

Počet bodov: 1

[ Pošli riešenie ] [ Tvoje riešenia ] [ Správne riešenia ] [ Vzorové riešenie ]

Spoločnosť rozdeľuje množstvo tém - voľba prezidenta v druhom kole, výstavba bytov/garážíi, ťažba uránu pri Košiciach. Spoločnosť je týmito témami polarizovaná - na tých čo s danou témov súhlasia a na tých čo sú proti nej. Miestna televízia aktuálne pripravuje ďalšiu debatu k tejto téme, ktorej súčasťou bude aj anketa medzi obyvateľmi. Pre zachovanie nestrannosti publicistiky je potrebné, aby obe strany boli zastúpené rovnomernne. Na základe pozorovaní z predošlých diskusií, teda konkrétne rozhovoru dvoch osôb je možné povedať, či dotyčná dvojica má rovnaký názor alebo nie.
Pomôžte vytvoriť program, ktorý spracuje získané pozorovania a zároveň umožní zistenie, či dve osoby patria do toho istého tábora (teda majú rovnaký názor).

Úloha

Napíšte program, ktorý bude analyzovať takéto rozdelenie ľudí do dvoch skupín. Bude postupne spracovávať inštrukcie:
  1. + A B - pozorovaním bolo zistené, že ľudia A a B majú rovnaký názor
  2. - A B - pozorovaním bolo zistené, že ľudia A a B majú opačné názory
  3. ? A B - otázka, či ľudia A a B určite majú rovnaký názor
Prvé dve inštrukcie majú signalizovať chybu, ak uvedená informácia je v protiklade s predchádzajúcimi pozorovaniami (po tejto chybe sa pokračuje ďalej, toto chybné pozorovanie sa ignoruje v ďalších výpočtoch). Na otázku (posledná inštrukcia) má program odpovedať s istotou áno/nie alebo neviem.

Vstup

Na prvom riadku vstupu sú dve celé čísla 1 ≤ N ≤ 100.000 a 1 ≤ M ≤ 300.000, určujúce počet ľudí a počet inštrukcií. Ľudí označme číslami od nuly.
Nasledujúce riadky reprezentujú inštrukcie. Obsahujú znak inštrukcie a dve celé čísla I, A, B. Znak I je z množiny +, -, ? (viď zadanie úlohy), čísla 0 ≤ A, B < N označujú ľudí, ktorých sa daná inštrukcia týka.

Výstup

Pre každú inštrukciu reprezentujúcu otázku na vstupe (?) je do ďalšieho riadku vo výstupe zapísaný reťazec ano (ak s istotou vieme, že majú rovnaký názor), nie (ak s istotou vieme, že majú rôzne názory), resp. neviem (inak). Pri inštrukciách zaznamenavajúcich pozorovanie vypíšte do ďalšieho riadku chyba, ak sa zistí chyba.

Príklad

Vstup:

6 7
+ 1 2
- 2 3
? 1 2
? 1 3
+ 1 3
? 4 5
+ 0 5

Výstup:

ano
nie
chyba
neviem