Cod sursa(job #657885)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 7 ianuarie 2012 16:11:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include<fstream>
#define NMAX 100010

using namespace std;

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

int n, m, i, t[NMAX], h[NMAX], tu, tv, op, u, v;

int tata(int nod)
{
	if (t[nod]!=-1) return tata(t[nod]);
	return nod;
}

int main()
{
	f>>n>>m;
	for (i=1; i<=n; ++i) t[i]=-1, h[i]=1;
	while(m--)
	{
		f>>op>>u>>v;
		if (op==2) 
			if (tata(u)==tata(v)) g<<"DA\n"; else g<<"NU\n";
		else
		{
			tu=tata(u);
			tv=tata(v);
			if (h[tu]==h[tv])  t[tv]=tu, ++h[tu];
			else if (h[tu]>h[tv]) t[tv]=tu;
				else t[tu]=tv;
		}
	}
	f.close();
	g.close();
	return 0;
}