Cod sursa(job #1240870)

Utilizator sorin2kSorin Nutu sorin2k Data 12 octombrie 2014 11:14:27
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<iostream>
using namespace std;

int p[100001], n, m;

int parent(int x) {
	int par, t;
	par = t = x;
	while(par != p[par]) {
		par = p[par];
	}
	// euristica
	while(x != p[x]) {
		t = p[x];
		p[x] = par;
		x = t;
	}
	return par;
}

int main() {
	freopen("disjoint.in", "r", stdin);
	freopen("disjoint.out", "w", stdout);
	int i, cod, x, y, px, py;
	scanf("%d %d", &n, &m);
	for(i = 1; i <= n; i++) {
		p[i] = i;
	}
	for(i = 1; i <= m; i++) {
		scanf("%d %d &d", &cod, &x, &y);
		if(cod == 1) {
			px = parent(x);
			py = parent(y);
			p[px] = py;
		} else {
			if(parent(x) == parent(y)) {
				printf("DA\n");
			} else {
				printf("NU\n");
			}
		}
	}
	return 0;
}