Cod sursa(job #409439)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 3 martie 2010 17:43:00
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <cstdio>
#define nmax 100005

using namespace std;

int var, N, M, tata [nmax], tip, a,i, b;
void leaga (int x) {
	
	if (tata [x] == x) {
		var = x;
		return ;
	}
	else leaga (tata [x]);
	tata [x] = var;
}
void unite (int x, int y) {
	leaga (x);
	leaga (y);
	tata [tata [y]] = tata [x];
}
int main () {

	freopen ("disjoint.in", "r", stdin);
	freopen ("disjoint.out", "w", stdout);
	scanf ("%d%d\n", &N, &M);
	for (i = 1; i <= N; i++)
		tata [i] = i;
	for (i = 1; i <= M; i++) {
		scanf ("%d%d%d\n", &tip, &a, &b);
		if (tip == 1) unite (a, b);
		if (tip == 2) {
			leaga (a);
			leaga (b);
		       	if (tata [a] == tata [b]) printf ("DA\n");
			else printf ("NU\n");
		}
	}
	return 0;
}