Cod sursa(job #276852)

Utilizator BloodRainBurceanu Gabriel BloodRain Data 11 martie 2009 12:55:52
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<fstream.h>
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int *t,*rg,n,m,i,o;
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)
{
int x,y;
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>>x>>y;
	if(o==1)
		{
		if(rg[x]>rg[y])
			{
			t[y]=x;
			}
		else
			{
			t[x]=y;
			}
		if(rg[x]==rg[y]) rg[y]++;
		}
	else
		{
		if(rad(x)==rad(y)) out<<"DA \n";
		else out<<"NU \n";
		}

	}
in.close();
out.close();
delete t;
delete rg;
return 0;
}