Cod sursa(job #672742)

Utilizator ukiandreaAndreea Lucau ukiandrea Data 2 februarie 2012 23:43:16
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <stdio.h>

struct node {
	node()
	{
		value = parent = 0;
	}

	node(int i)
	{
		value = parent = i;
	}

	int value;
	int parent;
};

node nodes[100001];

int get_parent(int x)
{
	if (nodes[x].parent == nodes[x].value)
		return x;

	int p = get_parent(nodes[x].parent);
	nodes[x].parent = p;

	return p;
}

void set_union(int x, int y)
{
	int p_x = get_parent(x);
	int p_y = get_parent(y);

	if (p_x == p_y)
		return;

	nodes[p_y].parent = p_x;
}

int main()
{
	int n, m;

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

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

	for (int i = 1; i <= n; i++)
		nodes[i] = node(i);

	for (int i = 0; i < m; i++) {
		int code, x, y;
		scanf("%d %d %d\n", &code, &x, &y);
		if (code == 1) 
			set_union(x, y);
		else if (code == 2) {
			if (get_parent(x) == get_parent(y)) 
				printf("DA\n");
			else
				printf("NU\n");
			
		}
		
	}
}