Cod sursa(job #2917466)

Utilizator livliviLivia Magureanu livlivi Data 5 august 2022 11:36:04
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
// #include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream cin("disjoint.in");
ofstream cout("disjoint.out");

class DisjointSet {
public:
	DisjointSet(int size) {
		padre.resize(size + 1);
	}

	void join(int x, int y) {
		x = rad(x);
		y = rad(y);
		padre[x] = y;
	}

	bool sameSet(int x, int y) {
		return (rad(x) == rad(y));
	}

private:
	vector<int> padre;

	int rad(int x) {
		if (padre[x] == 0) {
			return x;
		} else {
			padre[x] = rad(padre[x]);
			return padre[x];
		}
	}
};

int main() {
	int n, m; cin >> n >> m;
	DisjointSet padure(n);

	for (int i = 0; i < m; i++) {
		int op, x, y; cin >> op >> x >> y;
		if (op == 1) {
			padure.join(x, y);
		} else if (padure.sameSet(x, y)) {
			cout << "DA\n";
		} else {
			cout << "NU\n";
		}
	}

	return 0;
}