Cod sursa(job #2038492)

Utilizator robuvedVictor Robu robuved Data 13 octombrie 2017 18:47:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
using namespace std;

ifstream in("disjoint.in");
ofstream out("disjoint.out");
#define MAX 100000
int p[MAX];
int rang[MAX];
int N;
int Find(int x)
{
	if (p[x] != x)
		p[x] = Find(p[x]); 
	return p[x];
}
void Union(int x, int y)
{
	int px = Find(x);
	int py = Find(y);
	if (rang[px] >= rang[py])
	{
		p[py] = px;
	}
	else
	{
		p[px] = py;
	}
}
int main()
{
	int M;
	in >> N >> M;
	for (int i = 0; i < N; i++) rang[i] = 0, p[i] = i;
	while (M--)
	{
		int opt, x, y;
		in >> opt >> x >> y;
		x--; y--;
		switch (opt)
		{
		case 1:
			Union(x, y);
			break;
		case 2: 
			if (Find(x) == Find(y))
				out << "DA";
			else
				out << "NU";
			out << '\n';
			break;
		}
	}
}