Cod sursa(job #2681355)

Utilizator luckytoefLupu Eduard luckytoef Data 5 decembrie 2020 11:58:59
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>

std::ifstream f("disjoint.in");
std::ofstream g("disjoint.out");

int T[100001], r[100001];

int radacina(int k){
    if(T[k] == 0)
        return k;
    else {
        int x = radacina(T[k]);
        T[k] = x;
        return x;
    }
}

void unire(int x, int y){
    int rx = radacina(x), ry = radacina(y);
    if(rx != ry){
        if(r[rx] > r[ry])
            T[ry] = rx;
        else {
            T[rx] = ry;
            if(r[rx] == r[ry])
                r[ry]++;
        }
    }
}

int main()
{
    int n, m, op, x, y;
    f >> n >> m;
    while(m--){
        f >> op >> x >> y;
        if(op == 1)
            unire(x, y);
        else {
            if(radacina(x) == radacina(y))
                g << "DA\n";
            else g << "NU\n";
        }
    }
    return 0;
}