Cod sursa(job #639386)

Utilizator ELHoriaHoria Cretescu ELHoria Data 23 noiembrie 2011 09:43:16
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include <fstream>

using namespace std;

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

const int MAXN = 100005;
int TT[MAXN] , N , M;

int find(int x)
{
	int aux , R;
	for(R = x;TT[R] != R;R = TT[R]);
	
	for(;x !=TT[x];)
	{
		aux = TT[x];
		TT[x] = R;
		x = aux;
	}
	return R;
}

void unite(int x,int y)
{
	TT[y] = x; 
}

int main()
{
	fin>>N>>M;
	for(int i=1;i<=N;++i)
		TT[i] = i;

	for(;M;M--)
	{
		int x , y , tip;
		fin>>tip>>x>>y;
		if(tip==1) unite(x,y);
		else
			if(find(x)==find(y))
				fout<<"DA\n";
			else
				fout<<"NU\n";
	}
	return 0;
}