Cod sursa(job #550786)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 9 martie 2011 21:59:38
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
# include <fstream>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
int x,y,q,n,m,i,t[100005],h[100005];

  int rad (int x)
  {
	  if (t[x]==x)
		  return x;
	  else
		  return rad (t[x]);
  }
  
  void uneste (int x,int y)
  {
	  int xx=rad (x);
	  int yy=rad (y);
	  if (h[xx]<h[yy])
		  t[xx]=yy;
	  else
		  if (h[xx]>h[yy])
			  t[yy]=xx;
		  else
		  {
			  t[xx]=yy;
			  h[yy]++;
		  }
  }
  
int main ()
{
	f>>n>>m;
	for (i=1;i<=n;i++)
	{	
		t[i]=i;
		h[i]=1;
	}
	for (i=1;i<=m;i++)
	{
		f>>q>>x>>y;
		if (q==1)
			uneste (x,y);
		else
		{
			if (rad (x)==rad (y))
				g<<"DA\n";
			else
				g<<"NU\n";
		}
	}
	
	return 0;
}