Cod sursa(job #680791)

Utilizator soriynSorin Rita soriyn Data 15 februarie 2012 22:05:48
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<cstdio>
#define maxn 100005

int RG[maxn],TT[maxn];
int n,m;

int find(int x)
{
	int R,y;
	for(R=x;TT[R]!=R;R=TT[R]);
	
	for(;TT[x]!=x;)
	{
		y=TT[x];
		TT[x]=R;
		x=y;
	}
return R;
}

void unite(int x,int y)
{
	if(RG[x]>RG[y])
		TT[y]=x;
	else TT[x]=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++)
	{
		RG[i]=1;
		TT[i]=i;
	}
	for(int i=1;i<=m;i++)
	{
		int op,x,y;
		scanf("%d %d %d",&op,&x,&y);
		if(op==1)
		{
			unite(x,y);
		}
		else
		{
			if(find(x)==find(y))
				printf("DA\n");
			else printf("NU\n");
		}
	}
}