Cod sursa(job #362591)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 10 noiembrie 2009 10:27:45
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.57 kb
#include<stdio.h>
#define nmax 100002
int n,m,t[nmax],nr[nmax];

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

void unite(int x, int y)
{
	if(nr[x]>nr[y])
		nr[x]+=nr[y],t[y]=x;
	else
		nr[y]+=nr[x],t[x]=y;
}

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