Cod sursa(job #416801)

Utilizator funkydvdIancu David Traian funkydvd Data 13 martie 2010 15:55:49
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <cstdio>
#define nmax 100005
using namespace std;
int var, N, M, tata [nmax], tip, a,i, b;
void leaga (int x)
{
	if (tata[x]==x) 
	{
		var = x;
		return ;
	}
	else leaga (tata [x]);
	tata [x] = var;
}
void unite (int x, int y) 
{
	leaga (x);
	leaga (y);
	tata [tata [y]] = tata [x];
}
int main ()
 {

	freopen ("disjoint.in", "r", stdin);
	freopen ("disjoint.out", "w", stdout);
	scanf ("%d%d\n", &N, &M);
	for (i = 1; i <= N; i++) tata [i] = i;
	for (i = 1; i <= M; i++) 
	{
		scanf ("%d%d%d\n", &tip, &a, &b);
		if (tip == 1) unite (a, b);
		if (tip == 2) 
		{
			leaga (a);
			leaga (b);
		       	if (tata [a] == tata [b]) printf ("DA\n");
			else printf ("NU\n");
		}
	}
	return 0;
}