Cod sursa(job #2812804)

Utilizator DanielRusuDaniel Rusu DanielRusu Data 5 decembrie 2021 10:47:48
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>

using namespace std;

ifstream cin("disjoin.in");
ofstream cout("disjoin.out");

#define DIM 100002

int repr[DIM];

int cauta_reprez(int elem) {

    if(elem == repr[elem]) {
        return elem;
    }

    repr[elem] = cauta_reprez(repr[elem]);

    return repr[elem];
}

void unire_triburi(int om1, int om2) {

    int repr_om1 = cauta_reprez(om1);
    int repr_om2 = cauta_reprez(om2);

    if(repr_om1 != repr_om2)
        repr[repr_om1] = repr_om2;
}

int main() {
    int N, M;
    cin >> N >> M;

    for(int i = 1; i <= N; i++) repr[i] = i;

    int tip, x, y;
    while(M) {
        --M;
        cin >> tip >> x >> y;

        if(tip == 1) {
            unire_triburi(x, y);
        }
        else {
            int rx = cauta_reprez(x);
            int ry = cauta_reprez(y);

            if(rx == ry) cout << "DA\n";
            else cout << "NU\n";
        }
    }

    return 0;
}