Cod sursa(job #565809)

Utilizator gabipurcaruGabi Purcaru gabipurcaru Data 28 martie 2011 12:23:27
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
// infoarena: problema/disjoint //
#include <fstream>
using namespace std;

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

const int MAXN = 100010;

int t[MAXN],i,j,n,m,o,a,b,rang[MAXN];

int multime(int i)
{
	if(i == t[i])
		return i;
	return multime(t[i]);
}

void reuneste(int a, int b)
{
	int i,j;
	i = multime(a);
	j = multime(b);
	if(i == j)
		return;
	if(rang[i] < rang[j])
		t[i] = j;
	else
		t[j] = i;
	if(rang[i] == rang[j])
		rang[i]++;
}

int main()
{
	in>>n>>m;
	for(i=1; i<=n; i++)
		t[i] = i;
	for(i=1; i<=m; i++)
	{
		in>>o>>a>>b;
		if(o == 1)
			reuneste(a, b);
		else
			out<<(multime(a) == multime(b) ? "DA" : "NU")<<'\n';
	}
	
	return 0;
}