Cod sursa(job #2919049)

Utilizator AztecaVlad Tutunaru 2 Azteca Data 14 august 2022 22:44:00
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <iostream>

using namespace std;

const int MAX_N = 1e5;
int parent[MAX_N + 1], cnt[MAX_N + 1];
int n, q;

void init() {
	for (int i = 1; i <= n; i++) {
		parent[i] = i;
		cnt[i] = 1;
	}
}

int jump(int x) {
	if (x == parent[x]) {
		return x;
	}
	return parent[x] = jump(parent[x]);
}

void unite(int u, int v) {
	u = jump(u);
	v = jump(v);
	if (u != v) {	
		if (cnt[u] < cnt[v]) {
			swap(u, v);
		}
		parent[v] = u;
		cnt[u] += cnt[v];
	}
}

int main() {
	// ifstream cin("disjoint.in");
	// ofstream cout("disjoint.out");
	cin >> n >> q;
	init();
	while (q--) {
		int t, u, v;
		cin >> t >> u >> v;
		if (t == 1) {
			unite(u, v);
		} else {
			if (jump(u) == jump(v)) {
				cout << "DA\n";
			} else {
				cout << "NU\n";
			}
		}
	}
	return 0;
}