Cod sursa(job #563633)

Utilizator theodora_maneaManea Theodora Maria theodora_manea Data 25 martie 2011 16:54:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include <stdio.h>

int i,n,m,x,y,x1,y1,c;
int r[100001],t[100001];

int find(int x) {
	if (x!=t[x]) t[x]=find(t[x]);
	return t[x];
}

void reuneste(int x,int y) {
	if (r[x]>r[y]) {
		t[y]=x;
		r[x]++;
	}
	else {
		t[x]=y;
		r[y]++;
	}
}

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;
		r[i]=0;
	}
	
	for (i=1; i<=m; i++) {
		scanf("%d%d%d",&c,&x,&y);
		if (c==1) {
			x1=find(x);
			y1=find(y);
			reuneste(x1,y1);
		}
		else 
			if (find(x)==find(y)) printf("DA\n");
		    else printf("NU\n");
	}
	return 0;
}