Cod sursa(job #292449)

Utilizator Andreid91Ciocan Andrei Andreid91 Data 31 martie 2009 10:11:37
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<fstream.h>

int t[100005],r[100005];

int main()
{
int n,op,m,i,k,a,b,x,y;
ifstream f("disjoint.in");
f>>n>>m;

for (i=1;i<=n;i++)
	{
	t[i]=i;
	r[i]=1;
	}

ofstream g("disjoint.out");

for (i=1;i<=m;i++)
	{
	f>>op>>a>>b;
	if (op==1) {
		   while(t[a]!=a)
			a=t[a];
		   while(t[b]!=b)
			b=t[b];
		   if (r[a]>r[b]) t[b]=a;
			else t[a]=b;
		   if (r[a]==r[b]) r[b]++;
		   }

		else
		   {
		   x=a;
		   y=b;
		   while(t[x]!=x)
			x=t[x];
		   while(t[y]!=y)
			y=t[y];
		   if (x==y) g<<"DA"<<'\n';
			else g<<"NU"<<'\n';

		   while (t[a]!=x)
			{
			k=t[a];
			t[a]=x;
			a=k;
			}
		   while (t[b]!=y)
			{
			k=t[b];
			t[b]=y;
			b=k;
			}
		   }
	}
g.close();
f.close();
return 0;
}