Cod sursa(job #3341244)

Utilizator livliviLivia Magureanu livlivi Data 18 februarie 2026 18:24:19
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>

using namespace std;

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

struct Paduri {
	vector<int> tata;

	Paduri(int n) {
		tata.resize(n + 1);
	}

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

	bool query(int a, int b) {
		return rad(a) == rad(b);
	}

	void join(int a, int b) {
		if (query(a, b)) { return; }
		b = rad(b);
		a = rad(a);
		tata[b] = a;
	}
};

int main() {
	int n, m; cin >> n >> m;
	Paduri disjoin(n);

	for (int i = 0; i < m; i++) {
		int t, x, y; cin >> t >> x >> y;
		if (t == 1) {
			disjoin.join(x, y);
		} else {
			cout << (disjoin.query(x, y) ? "DA\n" : "NU\n");
		}
	}

	return 0;
}