Cod sursa(job #907442)

Utilizator deresurobertoFMI - Deresu Roberto deresuroberto Data 7 martie 2013 22:37:36
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include<cstdio>
long int tata[100005],n,m,x,y,t,i,tip;

void re()
{
	long int t1,t2;
	t=x;
	while(t!=tata[t])t=tata[t];
	t1=t;
	t=y;
	while(t!=tata[t])t=tata[t];
	t2=t;
	if(t1>t2){
		t=y;
		while(t!=tata[t]){
			t2=t;
			t=tata[t];
			tata[t2]=t1;
		}
		tata[t]=t1;
	}
	else{
		t=x;
		while(t!=tata[t]){
			t1=t;
			t=tata[t];
			tata[t1]=t2;
		}
		tata[t]=t2;
	}
}



int main()
{
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	scanf("%ld %ld",&n,&m);
	for(i=1;i<=n;i++)tata[i]=i;
	
	for(i=1;i<=m;i++){
		scanf("%ld %ld %ld",&tip,&x,&y);
		if(tip==1)re();
		else
		if(tip==2)
			if(tata[x]==tata[y])printf("DA\n");
		             else printf("NU\n");
	}
	
	return 0;
}