Cod sursa(job #2648046)

Utilizator bubblegumixUdrea Robert bubblegumix Data 8 septembrie 2020 14:47:06
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include<fstream>
#include<iostream>
using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

const int LIM = 100005;

int N, M;
int T[LIM], RANG[LIM];



int find(int x)
{
	if (T[x] == 0)
		return x;
	else
	{
		int y = find(T[x]);
		T[x] = y;
		return y;
	}
}
void unite(int m1, int m2)
{
	int T1 = find(m1);
	int T2 = find(m2);
	if (T1 != T2)
	{
		if (RANG[T1] < RANG[T2])
			T[T1] = T2;
		else
		{
			T[T2] = T1;
			if (RANG[T1] == RANG[T2])
				RANG[T1]++;
		}

	}

}

int main()
{

	f >> N >> M;
	int cod, x, y;
	for (int i = 1; i <= M; i++)
	{
		f >> cod >> x >> y;
		if (cod == 1)
			unite(x, y);
		else
		{
			if (find(x) == find(y))
				g << "DA";
			else
				g << "NU";
			g << '\n';

		}
	}
	return 0;
}