Cod sursa(job #843196)

Utilizator Brz_VladBrezae Vlad Brz_Vlad Data 27 decembrie 2012 16:14:11
Problema Paduri de multimi disjuncte Scor 90
Compilator c Status done
Runda Arhiva educationala Marime 0.75 kb
#include <stdio.h>

#define MAXN 100001

int parent[MAXN];
int height[MAXN];

int N,M;

void reunion(int a, int b)
{
	if( height[a] < height[b] ){
		parent[a] = b;
		height[a]++;
	}
	else{
		parent[b] = a;
		height[b]++;
	}
}

int get_root(int a)
{
	int root = a;
	while( parent[root] != root )
		root = parent[root];
	parent[a] = root;
	return root;
}

int main(int argc, char* argv[])
{
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	
	scanf("%d %d\n",&N,&M);
	
	int i,tip,a,b;
	
	for(i=1;i<=N;i++){
		parent[i] = i;
		height[i] = 1;
	}
	
	for(i=0;i<M;i++){
		scanf("%d %d %d",&tip,&a,&b);
		if(tip == 1)
			reunion(a,b);
		else{
			if( get_root(a) == get_root(b) )
				printf("DA\n");
			else
				printf("NU\n");
		}
	}
	
	return 0;
}