Cod sursa(job #808490)

Utilizator lianaliana tucar liana Data 6 noiembrie 2012 20:15:48
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<stdio.h>
#define nmax 100005
long x, y, z, aux, t[nmax], ad[nmax], r, n, m, i, op;

long rad(long z)
{
	aux=z;
	while(t[z]!=z)
		z=t[z];
	r=z;
	z=aux;
	while (t[z]!=z)
	{	
		aux=t[z];
		t[z]=r;	
		z=aux;
	}
	t[z]=r;
	return r;
}

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