Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2021-07-21 14:08:28.
Revizia anterioară   Revizia următoare  

 

Fişierul intrare/ieşire:portale.in, portale.outSursăSummer Challenge 2021
AutorLuca Perju VerzottiAdăugată desummer21comisia summer 2k21 summer21
Timp execuţie pe test2.5 secLimită de memorie131072 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Portale

Work in progress
Intr-un alt episod in care Rick si Morty pleaca sa salveze Atlantida, Citadela se afla, din nou, in pericol datorita unui Portal Gun pierdut. Rezistenta Morty-lor, obtinand aceasta arma, planuiesc o revolutie, creand un sistem de portale, sub forma unui arbore ascuns, intre n locatii principale (numerotate de la 1 la n).

Stiind ca dimensiunea Citadelei este suprasolicitata, Militia Rick poate schimba fortat reteaua de portaluri pentru a o determina.Asfel, aceasta poate introduce intr-un portal gun coordonatele a doua locatii cheie (a,b) determinand una din doua posibilitati: arma returneaza (0,0) semn ca un portal deja exista intre a si b ori returneaza un dublet (x,y) semnaland ca un nou portal se va deschide intre a si b, in timp ce, portalul dintre x si y se va inchide pentru a preveni aparitia unui ciclu, mentinand forma de arbore a retelei.

Ajutati Militia Rick sa gaseasca sistemul de portaluri pentru a prevenii ranirea inutila a Morty-lor.

Interactiune

Initial se citeste din stdin numarul t reprezentand numarul de teste.
Pentru fiecare test se citeste, apoi, n numarul de noduri ale arborelui.

Programul vostru are voie să pună query-uri scriind în standard output:

"? a b" reprezentând introducerea unui dublet in Portal Gun.
Dupa fiecare astfel de query, interactorul va raspunde in stdin astfel:

"0 0": daca muchia (a,b) exista deja in arbore.
"x y": daca muchia (a,b) nu exista, dubletul (x,y) reprezinta muchia care se va sterge din graf odata cu adaugarea muchiei (a,b) pentru a pastra forma de arbore.
După ce aţi aflat muchile arborelui, afişati "!\n" urmat de n-1 linii cu "a b" semnificand ca exista o muchie intre a si b.

După fiecare query si dupa ce afisati rezultatul unui test, trebuie sa afişaţi '\n' şi să daţi flush la standard output. Pentru a da flush vă puteţi folosi de următorul tabel:

LimbajC/C++PascalPythonJavaRust
Header necesarimport sysuse std::io::{self,Write};
Functiefflush(stdout) sau cout.flush()flush(output)sys.stdout.flush()System.out.flush()io::stdout().flush().unwrap();

Date de intrare

Fişierul de intrare portale.in ...

Date de ieşire

În fişierul de ieşire portale.out ...

Restricţii

  • ... ≤ ... ≤ ...

Exemplu

portale.inportale.out
This is some
text written on
multiple lines.
This is another
text written on
multiple lines.

Explicaţie

...

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?