Cod sursa(job #669515)

Utilizator PVladPurcarea Vlad PVlad Data 27 ianuarie 2012 10:46:36
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<stdio.h>
int h[100001],t[100001];
int find(int x){
	int r;
	for(r=x;t[r]!=r;r=t[r]);
	return r;
}
void reunion(int tx,int ty){
	if(h[tx]==h[ty]){
		h[tx]++;
		t[ty]=tx;
	}
	if(h[tx]>h[ty]){
		t[ty]=tx;
	}
	if(h[tx]<h[ty]){
		t[tx]=ty;
	}
}
int main()
{
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	int cod,x,y,n,m,i,tx,ty;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++){
		t[i]=i;
	}
	for(i=1;i<=m;i++){
		scanf("%d%d%d",&cod,&x,&y);
		tx=find(x);
		ty=find(y);
		if(cod==1){	
			if(tx!=ty){
				reunion(tx,ty);
			}
		}
		if(cod==2){
			if(tx==ty){
				printf("DA\n");
			}
			else{
				printf("NU\n");
			}
		}
	}
	return 0;
}