Cod sursa(job #721862)

Utilizator The_DisturbedBungiu Alexandru The_Disturbed Data 24 martie 2012 12:19:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<stdio.h>
int m,n,i,j,t[100013],h[100013],o,a,b;
inline void uneste(int a, int b)
{
	while(a!=t[a])a=t[a];
	while(b!=t[b])b=t[b];
	if(h[a]>h[b]){t[b]=a;return;}
	if(h[a]<h[b]){t[a]=b;return;}
	t[b]=a;
	++h[a];
}
inline bool check(int a, int b)
{
	while(a!=t[a])a=t[a];
	while(b!=t[b])b=t[b];
	return(a==b);
}
int main()
{
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;++i)t[i]=i,h[i]=1;
	for(int q=0;q<m;++q)
	{
		scanf("%d%d%d",&o,&a,&b);
		switch(o)
		{
		case 1:
			{
				uneste(a,b);
				break;
			}
		case 2:
			{
				if(check(a,b))printf("DA\n");else printf("NU\n");
				break;
			}
		}
	}
	return 0;
}