Cod sursa(job #679010)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 12 februarie 2012 17:31:45
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<stdio.h>
long t[100050],a[100050],n,m,x,y,z,t1,t2,i;
void addup(long x1,long x2)
{
	if(a[x1]<a[x2])t[x1]=x2;
	else
	{
		t[x2]=x1;
		if(a[x1]==a[x2])++a[x1];
	}

}
long find(long x)
{
	long tt,xx;
	xx=x;
	while(xx!=t[xx])xx=t[xx];
	tt=xx;
	while(x!=tt)
	{
		xx=x;
		x=t[x];
		t[xx]=tt;
	}
	return tt;
}
int main()
{
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
    scanf("%ld%ld",&n,&m);
	for(i=1;i<=n;++i)t[i]=i,a[i]=1;
	for(i=1;i<=m;++i)
	{
		scanf("%ld%ld%ld",&z,&x,&y);
		t1=find(x);
		t2=find(y);
		if(z==1)addup(t1,t2);
		else
		if(t1==t2)printf("DA\n");
		else printf("NU\n");
	}
	return 0;
}