Cod sursa(job #281294)

Utilizator ZillaMathe Bogdan Zilla Data 14 martie 2009 07:22:01
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <stdio.h>

#define Nmax 100001

int mul[Nmax],r[Nmax];
int n,m;

int det(int x)
{
	if(mul[x]==x)
		return x;
	else
		mul[x]=det(mul[x]);
    return mul[x];
}

void unesc(int x,int y)
{
	if(r[x]>r[y])
		mul[y]=x;
	else
		mul[x]=y;
	if(r[x]==r[y])
		++r[y];
}

int main()
{
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);

	scanf("%d%d",&n,&m);

	int i,x,y,op;

	for(i=1;i<=n;++i)
	{
		mul[i]=i;
		r[i]=1;
	}
	for(i=1;i<=m;++i)
		{
			scanf("%d%d%d",&op,&x,&y);
			if(op==2)
				{
				if(det(x)==det(y))
					printf("DA\n");
				else
					printf("NU\n");
				}
			else
				{
					unesc(det(x),det(y));
				}
		}
	return 0;
}