Cod sursa(job #2914456)

Utilizator indianu_talpa_iuteTisca Catalin indianu_talpa_iute Data 19 iulie 2022 23:26:02
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>
#define MAXN 100005

using namespace std;

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

int n, id[MAXN], sz[MAXN];

int root(int x) {
	while (x != id[x]) {
		id[x] = id[id[x]];
		x = id[x];
	}

	return x;
}

void connect(int x, int y) {
	int rootX = root(x), rootY = root(y);
	if (sz[rootX] < sz[rootY]) {
		id[rootX] = rootY;
		sz[rootY] += sz[rootX];
	} else {
		id[rootY] = rootX;
		sz[rootX] += sz[rootY];
	}
}

bool isConnected(int x, int y) {
	return root(x) == root(y);
}

int main() {
   	int m;
	fin >> n >> m;
	for (int i = 0; i < n; i++) {
		id[i] = i;
		sz[i] = 1;
	}

	for (int i = 0; i < m; i++) {
		int cod, x, y;
		fin >> cod >> x >> y;
		switch (cod) {
			case 1:
				connect(x, y);
				break;
			case 2:
				fout << (isConnected(x, y) ? "DA" : "NU") << '\n';
				break;
		}
	}

	return 0;
}