Cod sursa(job #505046)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 30 noiembrie 2010 12:55:54
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<fstream.h>
#define NMAX 100005

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

int h[NMAX], t[NMAX], n, m, i, op, x, y;

int stramos(int x)
{
	while (t[x]!=0) x=t[x];
	return x;
}

void adauga(int x, int y)
{
	int rx, ry;
	rx=stramos(x);ry=stramos(y);
	if (rx!=ry) 
	{
		if (h[rx]>h[ry])
		{
			t[ry]=rx;
			if (h[ry]+1>h[rx]) h[rx]=h[ry]+1;
		}
		else 
		{
			t[rx]=ry;
			if (h[rx]+1>h[ry]) h[ry]=h[rx]+1;
		}
	}
}

void afiseaza(int x, int y)
{
	int rx, ry;
	rx=stramos(x);ry=stramos(y);
	if (rx==ry) g<<"DA\n";
	else g<<"NU\n";
}

int main()
{
	f>>n>>m;
	for (i=1; i<=n; ++i){h[i]=1; t[i]=0;}
	for (i=1; i<=m; ++i)
	{
		f>>op>>x>>y;
		if (op==1) adauga (x, y);
		else afiseaza(x, y);
	}
	f.close();
	g.close();
	return 0;
}