Cod sursa(job #826322)

Utilizator niculina281Soare Oana niculina281 Data 30 noiembrie 2012 16:51:48
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include<stdio.h>
int t[100001],h[100001];

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

void unite(int u,int v)
{
if(h[u]==h[v])
	{
	h[u]++;
	t[v]=t[u];
	}
else
if(h[u]>h[v])
	t[v]=t[u];
else
	t[u]=t[v];
}

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