Cod sursa(job #810377)

Utilizator ahmed.abdraboahmed.abdrabo ahmed.abdrabo Data 10 noiembrie 2012 10:48:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.54 kb
#include <cstdio>
using namespace std;

const int MAX = 100001;
int n, m, a, b, c, A[MAX];

int get(int a) {
	return A[a] == a ? a : (A[a] = get(A[a]));
}

void merge(int a, int b) {
	A[get(a)] = get(b);
}

int main() {
	freopen("disjoint.in", "r", stdin);
	freopen("disjoint.out", "w", stdout);
	for (int i = 0; i < MAX; i++) {
		A[i] = i;
	}
	scanf("%d%d", &n, &m);
	for (int i = 0; i < m; i++) {
		scanf("%d%d%d", &a, &b, &c);
		if (a == 1) {
			merge(b, c);
		}
		if (a == 2) {
			printf(get(b) == get(c) ? "DA\n" : "NU\n");
		}
	}
	return 0;
}