Cod sursa(job #2794336)

Utilizator schizofrenieShallan Davar schizofrenie Data 4 noiembrie 2021 17:57:12
Problema Paduri de multimi disjuncte Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.65 kb
#include <assert.h>
#include <stdio.h>

#define MAXN 100000

int jump_back[MAXN];

int
root (int x) {
	if (jump_back[x] == x)
		return x;
	return jump_back[x] = root(jump_back[x]);
}

void
join (int a, int b) {
	jump_back[root(a)] = root(b);
}

int main () {
	int n, m;
	int i;

	assert(freopen("disjoint.in",  "r",  stdin));
	assert(freopen("disjoint.out", "w", stdout));

	assert(scanf("%d%d", &n, &m) == 2);

	for (i = 0; i != n; ++ i)
		jump_back[i] = i;

	for (i = 0; i != m; ++ i) {
		int a, b;
		int c;
		assert(scanf("%d%d%d", &c, &a, &b) == 3);
		-- a, -- b;

		if (c == 1)
			join(a, b);
		else
			puts(root(a) == root(b) ? "DA" : "NU");
	}
	return 0;
}