Cod sursa(job #411484)

Utilizator GotenAmza Catalin Goten Data 4 martie 2010 22:11:12
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include<fstream.h>
int main()
{
	int op,m,n,x,y,cx,cy,i,padre[100100],vy[20000],vx[20000];
	ifstream f("disjoint.in");
	ofstream g("disjoint.out");
	f>>n>>m;
	for(i=1;i<=n;i++)
		padre[i]=i;
	while(m--)
	{
		f>>op>>x>>y;
		if(op==1)
		{
			cx=0;
			cy=0;
			while(x!=padre[x])
			{
				x=padre[x];
				vx[++cx]=x;
			}
			while(y!=padre[y])
			{
				y=padre[y];
				vy[++cy]=y;
			}
			if(cx>cy)
			{
				for(i=1;i<=cy;i++)
					padre[vy[i]]=x;
				padre[y]=x;
			}
			else
			{
				for(i=1;i<=cx;i++)
					padre[vx[i]]=y;
				padre[x]=y;
			}
		}
		else
		{
			while(x!=padre[x])
				x=padre[x];
			while(y!=padre[y])
				y=padre[y];
			if(x==y)
				g<<"DA\n";
			else
				g<<"NU\n";
		}
	}
	return 0;
}