Cod sursa(job #665040)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 21 ianuarie 2012 15:21:56
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<stdio.h>
int op , i , T[100010] , n , m;
int radacina(int x){
	while(T[x]>0)
		x=T[x];
	return x;
}
void unire(int x , int y){
	int rx=radacina(x);
	int ry=radacina(y);
	if(T[rx]>T[ry]){
		T[ry]+=T[rx];
		T[rx]=ry;		
	}
	else{
		T[rx]+=T[ry];
		T[ry]=rx;
	}
}
void find(int x , int y){
	if(radacina(x)==radacina(y))
		printf("DA\n");
	else
		printf("NU\n");
}
int main(){
	int x , y;
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	scanf("%d %d",&n,&m);
	for(i=1;i<=n;i++)
		T[i]=-1;
	for(i=1;i<=m;i++){
		scanf("%d %d %d",&op,&x,&y);
		if(op==1)
			unire(x,y);
		if(op==2)
			find(x,y);
	}
	return 0;
}