Cod sursa(job #496222)

Utilizator APOCALYPTODragos APOCALYPTO Data 28 octombrie 2010 09:52:27
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
using namespace std;
#include<iostream>
#include<fstream>
#define Nmax 100005
int T[Nmax], rang[Nmax],N,M;
ofstream fout("disjoint.out");
int find(int x)
{ int R,y;
	for(R=x;R!=T[R];R=T[R]);
	
	for(;x!=T[x];)
	{
		y=T[x];
		T[x]=R;
		x=y;
	}
	return R;
	
}
void unite(int x,int y)
{
	if(rang[x]>rang[y])
		T[y]=x;
	   else
		   T[x]=y;
	if(rang[x]==rang[y]) rang[y]++;   
}
void init()
{int i;
	for(i=1;i<=N;i++)
	{T[i]=i;
	rang[i]=1;
	}
}

void cit()
{int i,c,y,x;
	ifstream fin("disjoint.in");
	fin>>N>>M;
	init();
	for(i=1;i<=M;i++)
	{	fin>>c>>x>>y;
	    if(c==1)
		{unite(find(x),find(y));
		}
	    else
		{
			if(find(x)==find(y))
				fout<<"DA\n";
			    else
				fout<<"NU\n";
		}
	}
}

int main()
{
	cit();
	fout.close();
	return 0;
}