Cod sursa(job #385587)

Utilizator Alexa_ioana_14Antoche Ioana Alexandra Alexa_ioana_14 Data 22 ianuarie 2010 23:44:49
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<cstdio>
#define N 100001
int gr[N],rang[N],n,m,x,y,q,u,v;
int find(int x)
{
	if (x!=gr[x])
		gr[x]=find(gr[x]);
	return gr[x];
}
void unesc(int x, int y)
{
	if (rang[x]<rang[y])
		gr[x]=y;
	else
	{
		gr[y]=x;
		rang[x]+=(rang[x]==rang[y]);
	}
}
void citire()
{
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	scanf("%d%d",&n,&m);
	for (int i=1; i<=n; ++i)
		gr[i]=i,rang[i]=1;
	while (m--)
	{
		scanf("%d%d%d",&q,&x,&y);
		u=find(x);
		v=find(y);
		if (q-1)
		{
			if(u==v)
				printf("DA\n");
			else
				printf("NU\n");
		}
		else
			unesc(u,v);
	}
}
int main()
{
	citire();
	return 0;
}