Cod sursa(job #560378)

Utilizator Bit_MasterAlexandru-Iancu Caragicu Bit_Master Data 18 martie 2011 14:29:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>

const int N = 100001;

int n;
int tata[N];

int radacina(int x)
{
	int nod = x,aux,rad;
	
	//cautare radacina
	while (tata[nod] != 0)
		nod = tata[nod];
	rad = nod;	
	
	//sudare
	nod = x;
	while (tata[nod] != 0)
	{
		aux = tata[nod];
		tata[nod] = rad;
		nod = aux;
	}
	
	return rad;
}

void reuniune(int x, int y)
{
	tata[radacina(x)] = radacina(y);
}

bool in_aceeasi_multime(int x, int y)
{
	return radacina(x) == radacina(y);
}

void rezolvare(int cod, int x, int y)
{
	if (cod == 1)
		reuniune(x,y);
	else
		printf(in_aceeasi_multime(x,y)?"DA\n":"NU\n");
}

int main()
{
	int m,a,b,c;
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	scanf ("%d%d",&n,&m);
	for (int i = 1; i <= m; ++i)
	{
		scanf("%d%d%d",&a,&b,&c);
		rezolvare(a,b,c);
	}
	return 0;
}