Cod sursa(job #2281348)

Utilizator pasoi_stefanPasoi Stefan pasoi_stefan Data 12 noiembrie 2018 08:28:22
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include<fstream>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int n,m,cod,x,y,T[100005],R[100005];
int find(int x){
    int t,y;
    for(t=x;T[t]!=t;t=T[t]);
    while(T[x]!=x){
        y=T[x];
        T[x]=t;
        x=y;
    }
    return t;
}
void unite(int x,int y){
    if(R[x]<=R[y])
        T[x]=y;
    else T[y]=x;
    if(R[x]==R[y]) ++R[y];
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        T[i]=i;
        R[i]=1;
    }
    while(m--){
        cin>>cod>>x>>y;
        if(cod==1){
            unite(find(x),find(y));
        }
        else{
            if(find(x)==find(y)) cout<<"DA\n";
            else cout<<"NU\n";
        }
    }
}