Cod sursa(job #2944053)

Utilizator federicisFedericis Alexandru federicis Data 21 noiembrie 2022 23:10:44
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>

using namespace std;

ifstream in("disjoint.in");
ofstream out("disjoint.out");

int n, m, colors[100001], minim, mult1, mult2;

int check(int nod){
    minim = min(minim, colors[nod]);
    if(colors[nod] == nod){
        return minim;
    }
    check(colors[nod]);
    colors[nod] = minim;
    return colors[nod];
}

int main() {
    in >> n >> m;
    for(int i = 1; i <= n; i++){
        colors[i] = i;
    }
    int nr, a, b;
    while(m--){
        in >> nr >> a >> b;
        if(nr == 1){
            colors[max(a,b)] = min(a, b);
        }
        else
        {
            minim = max(a, b);
            mult1 = check(a);
            minim = max(a, b);
            mult2 = check(b);
            out << (mult1 == mult2 ? "DA" : "NU") << '\n';
        }
    }
    return 0;
}