Cod sursa(job #2919052)

Utilizator AztecaVlad Tutunaru 2 Azteca Data 14 august 2022 23:10:07
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>

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;
}