Cod sursa(job #672846)

Utilizator niculina281Soare Oana niculina281 Data 3 februarie 2012 11:23:12
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include<stdio.h>

int t[100010],h[100010];

int find(int x)
{
for(;t[x]!=x;x=t[x]);
return x;
}

void UnIn(int x,int y)
{
if(h[x]>h[y])
	t[y]=x;
else
if(h[x]==h[y])
	{
	h[x]++;
	t[y]=x;
	}
else
	t[x]=y;
}

int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
int n,m,i,p,x,y,rx,ry;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
	t[i]=i;
for(i=1;i<=m;i++)
	{
	scanf("%d%d%d",&p,&x,&y);
	rx=find(x);
	ry=find(y);
	if(p==1)
		UnIn(rx,ry);
	else
	if(p==2)
		{
		
		if(rx==ry)
			printf("DA\n");
		else
			printf("NU\n");
		}
	}
	
return 0;
}