Cod sursa(job #563591)

Utilizator stay_awake77Cangea Catalina stay_awake77 Data 25 martie 2011 15:00:00
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<stdio.h>
#define NMAX 100100

int N,M,i,tip,x,y,rang[NMAX],t[NMAX];

inline void un(int a, int b)
{
	if( rang[a] > rang[b] )
	{
		++rang[a];
		t[b] = t[a];
	}
	else
	{
		++rang[b];
		t[a] = t[b];
	}
}

inline int find_group(int a)
{
	while( t[a]!=t[t[a]] ) t[a] = find_group(t[a]);
	
	return t[a];
}

int main()
{
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	
	scanf("%d%d",&N,&M);
	for( i=1; i<=N; i++ )
		t[i] = i;
	
	for( i=0; i<M; i++ )
	{
		scanf("%d%d%d",&tip,&x,&y);
		if( tip==1 ) un( find_group(x), find_group(y) );
		else
		{
			if( find_group(x)==find_group(y) ) printf("DA\n");
			else printf("NU\n");
		}
	}
	
	return 0;
}