Cod sursa(job #2639985)

Utilizator Iustin01Isciuc Iustin - Constantin Iustin01 Data 4 august 2020 17:08:16
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <bits/stdc++.h>
#define MAX 1000005
using namespace std;

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

int n, m, caz, x, y, rang[MAX], t[MAX];

int radacina(int x){
    if(!t[x])
        return x;
    return t[x] = radacina(t[x]);
}

void unire(int p, int k){
    int rp = radacina(p), rk = radacina(k);
    if(rp != rk){
        if(rang[rk] > rang[rp])
            t[rp] = rk, rang[rk]++;
        else{
            t[rk] = rp;
            if(rang[rp] == rang[rk])
                rang[rp]++;
        }
    }
}

int main(){
    in>>n>>m;
    for(int i = 1; i <= m; i++){
        in>>caz>>x>>y;
        if(caz == 1)
            unire(x, y);
        else
            out<<(radacina(x) == radacina(y) ? "DA" : "NU")<<"\n";


    }
}