Cod sursa(job #339297)

Utilizator razvi9Jurca Razvan razvi9 Data 9 august 2009 12:30:34
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<cstdio>

int r[100001],t[100001],n,m,x,y;

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

void connect(int x,int y)
{
	T(x);T(y);
	if(t[x]!=t[y])
		if(r[x]>r[y])
			t[t[y]]=t[x];
		else
			if(r[y]>r[x])
				t[t[x]]=t[y];
			else
			{
				t[t[x]]=t[y];
				++r[y];
			}
}

bool connected(int x,int y)
{
	return T(x) == T(y);
}

int main()
{
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;++i)
		t[i]=i;
	++m;
	while(--m)
	{
		scanf("%d %d %d",&n,&x,&y);
		if(n==1)
			connect(x,y);
		else
			printf(connected(x,y) ? "DA\n" : "NU\n");
	}
	fclose(stdout);
	return 0;
}