Cod sursa(job #2075185)

Utilizator aditzu7Adrian Capraru aditzu7 Data 25 noiembrie 2017 11:46:27
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include <fstream>

using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out")  ;
int c,i,n,op,h[100005],t[100005];
int m,x,y;
int caut(int x){
int r=x;
while(t[r]) r=t[r];
int y=x;
while(y!=r){
    int t1=t[y];
    t[y]=r;
    y=t1;

}
return r;
}
void leg(int x,int y){
int c;
int r1=caut(x),r2=caut(y);

if(h[r1]>h[r2])t[r1]=y,c=y;
else t[r2]=x,c=x;
if(h[r1]==h[r2])h[c]++;


}
int main()
{f>>n>>m;

    for(i=1;i<=n;i++) h[i]=1;
    for(i=1;i<=m;i++){

        f>>c>>x>>y;
        if(c==1) leg(x,y);
        else if(caut(x)==caut(y)) g<<"DA\n";
        else g<<"NU\n";

    }
     return 0;
}