Cod sursa(job #1210101)

Utilizator pavlov.ionPavlov Ion pavlov.ion Data 19 iulie 2014 11:21:29
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
 #include<fstream>
 using namespace std;
 #define MAXN 100005
 ifstream cin("disjoint.in");
 ofstream cout("disjoint.out");
int TT[MAXN],RG[MAXN],N,M;
int Find(int x){
	 int R,y;
	 for(R=x;TT[R]!=R;R=TT[R]);
	 //reconstrutia drumului
	 while(TT[x]!=x){
	 		y=TT[x];
			 TT[x]=R;
			 x=y;
			 }
	return R;
}
void Union(int x,int y){
	   if (RG[x]>RG[y]) {
	                  TT[y]=x;
	                  RG[x]=RG[x]+RG[y];
					  }
	        else { TT[x]=y;
				   RG[y]=RG[y]+RG[x];
				   }; 
}
int main() {
	int i,x,y,q;
	cin>>N>>M;
	for(i=1;i<=N;i++){
					TT[i]=i;
					RG[i]=1;
					}
	for(i=1;i<=M;i++){
			cin>>q>>x>>y;
			if(q==1) Union(Find(x),Find(y));
				else 
					 if (Find(x)==Find(y)) cout<<"DA"<<"\n";
					 	else cout<<"NU"<<"\n"; 
						}		  				   
   return 0;
}