Cod sursa(job #1210100)

Utilizator pavlov.ionPavlov Ion pavlov.ion Data 19 iulie 2014 11:19:20
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 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;
	        else TT[x]=y;
	    if(RG[x]==RG[y]) RG[y]++;		    
}
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;
}