Cod sursa(job #3360205)

Utilizator MihaiDraghiciMIHAI DRAGHICI MihaiDraghici Data 10 iulie 2026 14:23:38
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
#include <vector>

using namespace std;

struct Padure {

	vector<int> padure;
	vector<int> sz;

	Padure(int n) {

		padure.resize(n + 2);
		sz.resize(n + 2, 1);

	}

	int rad(int i) {

		if (padure[i] == 0) {

			return i;

		}

		padure[i] = rad(padure[i]);

		return padure[i];

	}

	void join(int i, int j) {

		i = rad(i);
		j = rad(j);

		if (i == j) {

			return;

		}

		if (sz[i] > sz[j]) {

			swap(i, j);

		}

		padure[i] = j;
		sz[j] += sz[i];

	}

};

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int main() {

	int n, m;
	fin >> n >> m;

	Padure padure(n);

	int tip, x, y;

	for (int i = 1; i <= m; i++) {

		fin >> tip >> x >> y;

		if (tip == 1) {

			padure.join(x, y);

		} else {

			if (padure.rad(x) == padure.rad(y)) {

				fout << "DA\n";

			} else {

				fout << "NU\n";

			}

		}

	}

	return 0;

}