Cod sursa(job #1166421)

Utilizator vladutz15FMI Cornoiu Vlad vladutz15 Data 3 aprilie 2014 16:16:36
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m,i,val,x,y,ff[100005],rg[100005];
int rad(int x)
{
	int y,z;
	for (y=ff[x];y!=ff[y];y=ff[y]);
		while(x!=ff[x])
		{
			z=ff[x];
			ff[x]=y;
			x=z;
		}
	return y;
}
int unite(int x, int y)
{
	if (rg[x]>rg[y])
		ff[y]=ff[x];
	else ff[x]=ff[y];
	if (rg[x]==rg[y]) rg[y]++;
}
int main ()
{
	f>>n>>m;
	for (i=1;i<=n;i++)
	{
		ff[i]=i;
		rg[i]=1;
	}
	for (i=1;i<=m;i++)
	{
		f>>val>>x>>y;
		if (val==1) unite(rad(x),rad(y));
		else 
		{
			if (rad(x)==rad(y)) g<<"DA\n";
			else g<<"NU\n";
		}
	}
}