Cod sursa(job #2427449)

Utilizator mihai.badilaBadila Mihai mihai.badila Data 31 mai 2019 21:19:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>
#define INF 100005

using namespace std;

int cod, x, y;
int n, m;
int dd[INF], rg[INF];

int find(int x)
{
	int r = dd[x], y;
	while (r != dd[r]) r = dd[r];
	while (dd[x] != x)
	{
		y = dd[x];
		dd[x] = r;
		x = y;
	}

	return r;
}

void unite(int x, int y)
{
	if (rg[x] > rg[y]) dd[y] = dd[x];
	else dd[x] = dd[y];

	if (rg[x] == rg[y])
		rg[x]++;

}

int main()
{
	ifstream f("disjoint.in");
	ofstream g("disjoint.out");
	f >> n >> m;
	for (int i = 1; i <= n; i++)
		dd[i] = i, rg[i] = 1;

	while (m--)
	{
		f >> cod >> x >> y;
		if (cod == 1)
			unite(find(x), find(y));
		else
		{
			if (find(x) == find(y)) g << "DA\n";
			else g << "NU\n";
		}
	}
	f.close();
	g.close();
	return 0;
}