Cod sursa(job #2841189)

Utilizator apocal1ps13Stefan Oprea Antoniu apocal1ps13 Data 29 ianuarie 2022 13:05:59
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int t[100001], dim[100001], n, m;
vector<int>rez;
int radacina(int x) {
	if (x == t[x]) return x;
	else return t[x] = radacina(t[x]);
}
void union_set(int x, int y) {
	int a = radacina(x);
	int b = radacina(y);
	if (dim[a] < dim[b]) dim[b] += dim[a], t[a] = b;
	else dim[a] += dim[b], t[b] = a;
}
int main() {
	in >> n >> m;
	for (int i = 1; i <= n; i++) t[i] = i, dim[i] = 1;
	for (int i = 0; i < m; i++) {
		int task, x, y;
		in >> task >> x >> y;
		if (task == 1) {
			if (radacina(x) != radacina(y)) union_set(x, y);
		}
		else {
			if (radacina(x) == radacina(y)) rez.push_back(1);
			else rez.push_back(0);
		}
	}for (auto i : rez)
		if (i) out << "DA" << '\n';
		else out << "NU" << '\n';
	return 0;
}