Cod sursa(job #2263832)

Utilizator vasyyVasiloiu Bogdan vasyy Data 19 octombrie 2018 13:28:48
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int n,m,RG[10002],TT[10002],i,q,x,y;
int get_root(int x){
int R=x;
while(R!=TT[R]){
    R=TT[R];
}
while(TT[x]!=x){
    int y=TT[x];
    TT[x]=R;
    x=y;
}
 return R;
}
void unite(int x,int y){
if(RG[x]==RG[y]){
    RG[x]++;
    TT[y]=x;
}
else{
    if(RG[x]>RG[y]) TT[y]=x;
    else TT[x]=y;
}

}
int main()
{
    cin>>n>>m;
    for(i=1;i<=n;i++){
        RG[i]=1;
        TT[i]=i;
    }
    for(i=1;i<=m;i++){
        cin>>q>>x >>y;
        if(q==1){
            unite(get_root(x),get_root(y));
        }
        else {
            if(get_root(x)==get_root(y)) cout <<"DA"<<endl;
            else cout<<"NU"<<endl;
        }
    }
    return 0;
}