Cod sursa(job #1210006)

Utilizator pavlov.ionPavlov Ion pavlov.ion Data 18 iulie 2014 23:36:41
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 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)
{
 	 while(parent[x]>0)
 	   x=parent[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;
}