Informatică, întrebare adresată de Utilizator anonim, 8 ani în urmă

Se consideră N copii, numerotați de la 1 la N și fiecare face parte dintr-o clasă. Inițial sunt n clase și fiecare copil face parte din propria sa clasă. Se dau M operații de două tipuri:


1 x y – acțiune: clasele din care fac parte copiii cu numerele x și y se reunesc. Dacă x și y fac deja parte din aceeași clasă, operația nu se efectuează

2 x y – întrebare: copiii cu numerele x și y sunt sau nu în aceeași clasă?

Cerința

Răspundeți la toate întrebările de al doilea tip, în ordinea acestora.


Date de intrare

Programul citește de la tastatură numerele N și M, iar apoi M triplete de numere naturale de forma op x y, unde op poate lua doar valorile 1 și 2, aceste triplete reprezentând câte o operație.


Date de ieșire

Programul va afișa pe ecran, pe câte o linie, răspunsul la fiecare întrebare de tip 2. Dacă la întrebarea 2 x y răspunsul este afirmativ, adică x și y se află în aceeași clasă, atunci veți afișa DA, iar în caz contrar veți afișa NU.


Restricții și precizări

1 ≤ N ≤ 500

2 ≤ M ≤ 2000

va exista cel puțin o operație de tip 1 și cel puțin o operație de tip 2.


Exemplu

Intrare


6 6

1 1 4

1 3 6

2 4 6

1 1 3

2 4 6

2 1 6

Ieșire


NU

DA

DA

Explicație

Sunt 6 copii și 6 operații. După primele două operații, elevii 1 și 4 sunt în aceeași clasă și 3 și 6 sunt în aceeași clasă. La întrebarea 2 4 6 răspunsul este evident NU. La a patra operație 1 și 3 sunt trecuți în aceeași clasă, deci va exista o clasă cu 4 copii: {1,3,4,6}, deci la ultimele două întrebări acum răspunsul este DA la ambele.


Problema pe pbinfo: #3338 disjoint


Imi poate spune cineva ce am gresit la codul meu va rog ?
Am nevoie de raspuns repede va rog va dau si coroana si tot ce vreti pls!

Anexe:

Răspunsuri la întrebare

Răspuns de robertgaube
2

Răspuns:

       if(p==1&&E[a]!=E[b])

       {

           for(int j=1;j<=n;j++)

               if(E[j]==E[b]) E[j]=E[a];

       }

       if(p==1&&E[a]!=E[b])

       {

           g=E[b];

           for(int j=1;j<=n;j++)

               if(E[j]==g) E[j]=E[a];

       }

Explicație:

Daca nu salvezi E[b] in alta variabila o sa il inlocuiesti E[b] cu E[a] in acel for cu j si dupa o sa continui sa compari cu valoarea lui E[a].

Alte întrebări interesante