Cod sursa(job #1210008)

Utilizator pavlov.ionPavlov Ion pavlov.ion Data 18 iulie 2014 23:50:22
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
 #include<fstream>
 using namespace std;
 #define MAXN 100005
 ifstream cin("disjoint.in");
 ofstream cout("disjoint.out");
 int parent[MAXN],N,M,size[MAXN];
  int Find(int x)
{      int i,rx,ret[MAXN],k=0;
       rx=x;
 	 while(parent[x]>0){
            ret[++k]=x;
 	          x=parent[x];
    }		 
	for(i=1;i<=k;i++)
	        parent[ret[i]]=x;  			   		        
 	   return x;
}
 void Union(int x, int y)
 {
  	 int rx=Find(x),ry=Find(y);
      if(rx!=ry){
        if(size[rx]>size[ry]){
                      parent[ry]=rx;
                      size[rx]=size[rx]+size[ry];
							 }
		else {
			 parent[rx]=ry;
			 size[ry]=size[ry]+size[rx];
			 }
			 } 
 }//end Union
 int main() {
 	 int i,x,y,q;
 	 for(i=1;i<=N;i++)
 	             size[i]=1;
 	     cin>>N>>M;
 	 for(i=1;i<=M;i++){
	        cin>>q>>x>>y;
	        if(q==1) Union(x,y);
	        else if(Find(x)==Find(y)) cout<<"DA"<<"\n";
			           else cout<<"NU"<<"\n";  
   }//end for		 
return 0;
}