Cod sursa(job #722629)

Utilizator ioanabIoana Bica ioanab Data 24 martie 2012 17:51:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <fstream>
using namespace std;

ifstream in("disjoint.in");
ofstream out("disjoint.out");

const int N=100005;
int t[N],p[N];

void reu(int x,int y)
{
	if(p[x]>p[y])
	{
		t[y]=x;
		p[x]+=p[y];
	}
	else
	{
		t[x]=y;
		p[y]+=p[x];
	}
}

int rad(int x)
{
	int r,y;
	r=x;
	while(r!=t[r])
		r=t[r];
	while(t[x]!=x)
	{
		y=t[x];
		t[x]=r;
		x=y;
	}
	return r;
}

		
int main()
{
	int n,k,i,x,y,q;
	in>>n>>k;
	for(i=1;i<=n;i++)
	{
		t[i]=i;
		p[i]=1;
	}
	for(i=1;i<=k;i++)
	{
		in>>q>>x>>y;
		x=rad(x);
		y=rad(y);
		if(q==1)
			reu(x,y);
		else
		{
			if(x==y)
				out<<"DA\n";
			else
				out<<"NU\n";
		}
	}
	
	return 0;
}