Cod sursa(job #819917)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 19 noiembrie 2012 20:33:59
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<stdio.h>
long n , m , tx , ty , cod , t[ 100007 ] , h [ 100007 ] , x , y;

long father (long u)
{
	if (u == t[ u ] )
		return u;
	return father( t[ u ] );
}

void unite(long u , long v)
{
	if (h[ u ] == h[ v ])
	{
		t[ v ] = u;
		h[ u ]++;
	}
	else
		if (h[ u ] > h[ v ])
			t [ v ] = u;
		else
			t [ u ] = v;
}

int main()
{
	freopen("disjoint.in" , "r" , stdin);
	freopen("disjoint.out" , "w" , stdout);
	scanf("%ld %ld" , &n , &m);
	for (int i = 1 ; i <= n ;++i)
		t[ i ] = i, h[ i ] = 1; 
	for (long i = 1 ; i <= m ;++i)
	{
		scanf("%ld %ld %ld" , &cod , &x , &y);
		if (cod == 1)
		{
			tx = father ( x );
			ty = father ( y );
			if (tx != ty)
				unite ( tx, ty );
		}
		else
		{
			tx = father ( x );
			ty = father ( y );
			if (tx == ty)
				printf("DA\n");
			else
				printf("NU\n");
		}
	}
	return 0;
}