Cod sursa(job #2136245)

Utilizator adriangh3Adrian Gheorghiu adriangh3 Data 19 februarie 2018 19:35:23
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int t[100001], rg[100001];

int find(int node)
{
	int R = node, temp;
	while (t[R] != 0)
	{
		R = t[R];
	}
	while (t[node])
	{
		temp = t[node];
		t[node] = R;
		node = temp;
	}
	return R;
}

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

int main()
{
	int n, m, cod, x, y;
	in >> n >> m;
	for (int i = 1; i <= n; i++) rg[i] = 1;
	while (m)
	{
		in >> cod >> x >> y;
		if (cod == 2)
		{
			if (find(x) == find(y)) out << "DA\n";
			else out << "NU\n";
		}
		else
		{
			unite(find(x), find(y));
		}
		m--;
	}
	return 0;
}