Cod sursa(job #423500)

Utilizator za_wolfpalianos cristian za_wolf Data 23 martie 2010 22:46:43
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include<stdio.h>
#define NMAX 100100
int x[NMAX],rang[NMAX],i,j,a,b,k,n,m;
int find(int k)
{
	if (k!=x[k])
		x[k]=find(x[k]);
	return x[k];
}
void add(int k)
{
	x[k]=k;
	rang[k]=0;
}
void join(int a , int b)
{
	if (rang[a]>rang[b])
		x[b]=a;
	else
	{
		x[a]=b;
		if (rang[a]==rang[b])
			rang[b]++;
	}
}
int main()
{
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	scanf("%d%d",&n,&m);
	for (i=1;i<=n;i++)
		add(i);

	for (i=1;i<=m;i++)
	{
		scanf("%d%d%d",&k,&a,&b);
		if (k==1)
			join(find(a),find(b));
		else
			if (x[find(a)]==x[find(b)])
				printf("DA\n");
			else
				printf("NU\n");
	}


	return 0;
}