Cod sursa(job #1142353)

Utilizator denis1chirita denis denis1 Data 13 martie 2014 18:54:55
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include<cstdio>
using namespace std;
int t[100005],h[100005];
int find(int x){
	while(x!=t[x])
	x=t[x];
	return x;
}
void unifica(int x,int y){
if(h[x]>h[y])
t[y]=x;
else
if(h[x]<h[y])
t[x]=y;
else{
h[x]++;
t[y]=x;
}
}
int main(){
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	int n,m,x,y,i,nr=0,tx,ty,a;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++){
		t[i]=i;
		h[i]=1;
	}
	for(i=1;i<=m;i++){
		scanf("%d%d%d",&a,&x,&y);
		if(a==1){
		tx=find(x);
		ty=find(y);
		if(tx!=ty)
		unifica(tx,ty);
		}
		else{
			if(find(x)==find(y))
			printf("DA\n");
			else
			printf("NU\n");
}
	}
}