Cod sursa(job #3039339)

Utilizator game_difficultyCalin Crangus game_difficulty Data 28 martie 2023 14:01:09
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <vector>

using namespace std;

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

int v[100005];
int h[100005];

int main() {
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		v[i] = i;
	}
	for (int i = 1; i <= m; i++) {
		int t, x, y;
		cin >> t >> x >> y;
		int p1 = x;
		vector<int> c1;
		while (v[p1] != p1) {
			c1.push_back(p1);
			p1 = v[p1];
		}
		int p2 = y;
		vector<int> c2;
		while (v[p2] != p2) {
			c2.push_back(p2);
			p2 = v[p2];
		}
		if (t == 1) {
			if (h[p2] == h[p1]) {
				h[p1]++;
				v[p2] = p1;
				for (int i : c2) v[i] = p1;
			}
			else if(h[p2] > h[p1]) {
				v[p1] = p2;
				for (int i : c1) v[i] = p2;
			}
			else if (h[p1] > h[p2]) {
				v[p2] = p1;
				for (int i : c2) v[i] = p1;
			}
		}
		else {
			for (int i : c1) v[i] = p1;
			for (int i : c2) v[i] = p2;
			if (p1 == p2) {
				cout << "DA\n";
			}
			else cout << "NU\n";
		}
	}
	return 0;
}