Cod sursa(job #826324)

Utilizator Sanduleac_VladSanduleac Vllad Alexandru Sanduleac_Vlad Data 30 noiembrie 2012 16:53:00
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <stdio.h>

long N, M;
long t[100001], h[100001], tip, x, y;

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

long unite(long u, long v) {
	if(h[u] == h[v]) {
		t[v] = u;
		h[u]++;
	}
	else if(h[u] < h[v])
		t[u] = t[v];
	else t[v] = t[u];
}

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