Cod sursa(job #228886)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 8 decembrie 2008 17:31:04
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.55 kb
#include <stdio.h>

int N, M, t[100005];

int get_root(int x)
{
	while (t[x] != x) x = t[x];
	return x;
}

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

	int i, op, x, y, r1, r2;
	scanf("%d %d",&N, &M);
	for (i = 1; i <= N; i++) t[i] = i;
	for (i = 1; i <= M; i++)
	{
		scanf("%d %d %d",&op, &x, &y);
		r1 = get_root(x); r2 = get_root(y);		

		if (op == 1)
		{
			if (r1 < r2) t[r2] = r1;
			else t[r1] = r2;
		}
		else printf("%s\n", r1 == r2 ? "DA" : "NU");
	}
	return 0;
}