Cod sursa(job #2457634)

Utilizator matei123Biciusca Matei matei123 Data 18 septembrie 2019 12:29:51
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.63 kb
#include <fstream>
using namespace std;
ifstream f("disjoint.in"); ofstream g("disjoint.out");
int tata[200005], dist[200005];
int rad(int x)
{   if (tata[x] == x) return x;
	return (rad(tata[x]));
}
void unire(int x, int y)
{   if (dist[x] < dist[y]) tata[x] = tata[y];
	else tata[y] = tata[x];
	if (dist[x] == dist[y]) dist[y]++;
}
int main()
{   int n, m, k, i, x, y;
	f >> n >> m;
	for (i = 1; i <= n; i++)
	{   tata[i] = i;
		dist[i] = 1;
	}
	for (i = 0; i < m; i++)
	{   f >> k >> x >> y;
		if (k == 1) unire(rad(x), rad(y));
		else if (rad(x) == rad(y))g << "DA" << '\n';
		else g << "NU" << '\n';
	}
	return 0;
}