Cod sursa(job #3207073)

Utilizator AndreasBossGamerBaragau Andreas AndreasBossGamer Data 24 februarie 2024 22:36:09
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <vector>

using namespace std;

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

int n, q;

vector<int> parent;
vector<int> rang;

int find(int x) {
	int repX;
	for (repX = x; parent[repX] != repX; repX = parent[repX]);
	int p = repX;
	for (repX = x; parent[repX] != repX; repX = parent[repX])
	{
		parent[repX] = p;
	}
	return repX;
}

void unire(int x, int y) {
	if (find(x) != find(y))
	{
		if (rang[x] > rang[y]) parent[y] = x;
		else parent[x] = y;

		if (rang[x] == rang[y]) rang[y]++;
	}
}


int main()
{
	cin >> n >> q;
	parent.resize(n + 1);
	rang.resize(n + 1);
	for (int i = 1; i <= n; i++) parent[i] = i;
	while (q--)
	{
		int caz, x, y;
		cin >> caz >> x >> y;
		if (caz == 1)
		{
			unire(x, y);
		}
		else 
		{
			if (find(x) == find(y)) cout << "DA\n";
			else cout << "NU\n";
		}
	}
}