Cod sursa(job #961338)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 11 iunie 2013 21:55:08
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <cstdio>

using namespace std;

int v[100005];

inline int Find(int a)
{
	int i=a,rad;
	while(v[a]>0)
		a=v[a];
	rad=a;
	while(v[i]>0)
	{
		a=v[i];
		v[i]=rad;
		i=a;
	}
	return rad;
}

inline void Union(int a,int b)
{
	v[a]+=v[b];
	v[b]=a;
}

int main()
{
	int n,m,i,t,cod,a,b;
	freopen ("disjoint.in","r",stdin);
	freopen ("disjoint.out","w",stdout);
	scanf("%d%d", &n,&m);
	for(i=1;i<=n;i++)
		v[i]=-1;
	for(t=1;t<=m;t++)
	{
		scanf("%d%d%d", &cod,&a,&b);
		if(cod==1)
		{
			a=Find(a);b=Find(b);
			Union(a,b);
		}
		else
		{
			a=Find(a);b=Find(b);
			if(a==b)
				printf("DA\n");
			else
				printf("NU\n");
		}
	}
	return 0;
}