Cod sursa(job #636427)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 19 noiembrie 2011 20:01:52
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <stdio.h>
#include <math.h>

long n, m, i, a, b, c, tata[100010];

inline long parc(long nod, long o) {
	if (tata[nod]) parc(tata[nod], 1);
	else {
		long aux = nod; 
		if (o == 1) tata[nod] = aux;
		return aux;
	}
}

int main() {
	freopen("disjoint.in", "r", stdin);
	freopen("disjoint.out", "w", stdout);
	
	scanf("%ld %ld", &n, &m);
	for (i = 1; i <= m; ++i) {
		scanf("%ld", &c);
		scanf("%ld %ld", &a, &b);
		if (c == 1) {
			long A = parc(a, 0);
			long B = parc(b, 0);
			tata[B] = A;
		}
		if (c == 2) {
			if (parc(a, 0) == parc(b, 0)) {
				printf("DA\n");
			} else {
				printf("NU\n");
			}
			parc(a, 1);
			parc(b, 1);			
		}
	}
	return 0;
}