Cod sursa(job #794205)

Utilizator tudgal1001Profir Tudor tudgal1001 Data 5 octombrie 2012 22:45:57
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include<cstdio>
#define NMax 100005
using namespace std;

int n,p[NMax],rang[NMax];

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

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

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