Cod sursa(job #363602)

Utilizator andrei.sfrentSfrent Andrei andrei.sfrent Data 13 noiembrie 2009 20:56:59
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include <stdio.h>

#define MAXN 100000

int t[MAXN + 1], n, m;

int init() { for(int i = 1; i <= n; ++i) t[i] = i; }

int reprezentant(int);

void reuneste(int ra, int rb) { t[rb] = ra; }

int reprezentant(int nod)
{
	while(t[nod] != nod) nod = t[nod];
	return nod;
}

int main()
{
	freopen("disjoint.in", "r", stdin);
	freopen("disjoint.out", "w", stdout);
	
	int op, x, y;

	scanf("%d%d", &n, &m);

	init();

	while(m--)
	{
		scanf("%d%d%d", &op, &x, &y);
		if(op == 1) reuneste(reprezentant(x), reprezentant(y));
		else
		{
			if(reprezentant(x) == reprezentant(y)) printf("DA\n");
			else printf("NU\n");
		}
	}

	return 0;
}