Cod sursa(job #826329)

Utilizator Vlad.PPetcu Vlad Vlad.P Data 30 noiembrie 2012 16:56:06
Problema Paduri de multimi disjuncte Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<stdio.h>
int t[100001],h[100001],n,m;
int find(int x){
	if(t[x]==x){
		return x;
	}
	return find(t[x]);
}
void unite(int u,int v){
	if(h[u]==h[v]){
		t[v]=u;;
		h[v]++;
	}
	else if(h[u]<h[v]){
		t[u]=v;
	}
	else{
		t[v]=u;
	}
}
void init(){
	int i;
	for(i=1;i<=n;i++){
		t[i]=i;
	}
}
int main(){
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	int x,i,a,b,fa,fb;
	scanf("%d%d",&n,&m);
	init();
	for(i=1;i<=m;i++){
		scanf("%d%d%d",&x,&a,&b);
		fa=find(a);
		fb=find(b);
		if(x==1&&fa!=fb){
			unite(a,b);
		}
		if(x==2){
			if(fa==fb){
				printf("DA\n");
			}
			if(fa!=fb){
				printf("NU\n");
			}
		}
	}
	return 0;
}