Cod sursa(job #274838)

Utilizator BloodRainBurceanu Gabriel BloodRain Data 10 martie 2009 00:03:08
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include<fstream.h>
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int *t,*rg,n,m,i,o,a,b;
int rad(int nod)
	{
	int y;
	int x;
	x=nod;
	while(t[nod]!=nod)
		{
		nod=t[nod];
		}
	while(t[x]!=x)
		{
		y=t[x];
		t[x]=nod;
		x=y;
		}
	return nod;
	}
int main(void)
{
in>>n>>m;
t=new int[n+21];
rg=new int[n+21];
for(i=1;i<=n;i++)
	{
	t[i]=i;
	rg[i]=1;
	}
for(i=1;i<=m;i++)
	{
	in>>o>>a>>b;
	if(o==1)
		{
		if(rg[a]>rg[b]) t[b]=a;
		else t[a]=b;
		if(rg[a]==rg[b]) rg[b]++;
		}
	else
		{
		if(rad(a)==rad(b)) out<<"DA \n";
		else out<<"NU \n";
		}
	}
in.close();
out.close();
delete t;
delete rg;
return 0;
}