Cod sursa(job #780947)

Utilizator stef1995mmarcu stefan ovidiu stef1995m Data 22 august 2012 22:12:33
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<iostream>
#include<fstream>
using namespace std;
const int maxx=100002;
int a,b,c,n,k,i,tt[maxx],rang[maxx];
int tata(int nod)
{
	int varf,x;
	for(varf=nod;tt[varf]!=varf;varf=tt[varf]);
	for(x=nod;tt[x]!=x;x=tt[x],tt[nod]=varf,nod=x);
	return varf;
}
void unire(int a,int b)
{
	if(rang[a]>rang[b])
		tt[b]=a;
	else
		tt[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",&n,&k);
	for(i=1;i<=n;i++)
	{
		tt[i]=i;
		rang[i]=1;
	}
	for(i=1;i<=k;i++)
	{
		scanf("%d %d %d\n",&a,&b,&c);
		b=tata(b);
		c=tata(c);
		if(a==1)
			unire(b,c);
		else
			if(b==c)
				printf("DA\n");
			else
				printf("NU\n");
	}
	return 0;
}