Cod sursa(job #1611021)

Utilizator ArkinyStoica Alex Arkiny Data 23 februarie 2016 21:42:26
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<fstream>
using namespace std;

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

int T[100010], N, Q;

void join(int x, int y)
{
	while (T[x]>0)
		x = T[x];
	while (T[y]>0)
		y = T[y];

	if (T[x] < T[y])
	{
		T[x] += T[y];
		T[y] = x;
	}
	else
	{
		T[y] += T[x];
		T[x] = y;
	}
}
bool check(int x, int y)
{
	while (T[x]>0)
		x = T[x];
	while (T[y]>0)
		y = T[y];
	return (x == y);
}
int main()
{

	in >> N>>Q;

	for (int i = 1;i <= N;++i)
		T[i] = -1;

	for (int i = 1;i <= Q;++i)
	{
		int op, x, y;
		in >> op >> x >> y;
		if (op == 1)
			join(x, y);
		else  if (check(x, y))
			out << "DA\n";
		else
			out << "NU\n";
	}
	

	return 0;
}