Cod sursa(job #502234)

Utilizator skullLepadat Mihai-Alexandru skull Data 18 noiembrie 2010 16:16:57
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include <stdio.h>
using namespace std;
#define nmax 100005

int GR[nmax];
int n;

int grupa(int x)
{
	if (GR[x] == x) return x;
	GR[x] = grupa(GR[x]);
	return GR[x];
}

void unire(int x, int y)
{
	GR[grupa(x)] = grupa(y);
}

int main ()
{
	int i, m, tip, x, y;
	freopen("disjoint.in","r",stdin);
	freopen("disjoint.out","w",stdout);
	scanf("%d%d", &n, &m);
	for (i = 1; i <= n; ++i) GR[i] = i;
	for (i = 1; i <= m; ++i)
	{
		scanf("%d%d%d", &tip, &x, &y);
		if (tip == 1)
			unire(x, y);
		else
			if (grupa(x) == grupa(y) ) printf("DA\n");
				else printf("NU\n");
	}
	return 0;
}