Cod sursa(job #587418)

Utilizator varuvasiTofan Vasile varuvasi Data 4 mai 2011 20:09:28
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>

#define maxn 100333

int n, m;
int group[maxn];

void union_groups(int i1, int i2)
{
	group[i1] = i2;
}

int lookup(int i)
{
	if (group[i] == i)
		return i;
	return group[i] = lookup(group[i]);
}

int main()
{
	int i,j;
	FILE *fin = fopen("disjoint.in", "rt"), *fout = fopen("disjoint.out", "wt");
	fscanf(fin, "%d %d", &n, &m);
	for (i=1; i<=n; i++)
		group[i] = i;

	int op, x, y;
	for (i=1; i<=m; i++)
	{
		fscanf(fin, "%d %d %d", &op, &x, &y);
		if (op == 1)
		{
			union_groups(lookup(x), lookup(y));
		}
		else
		{
			int f_x = lookup(x), f_y = lookup(y);
			if (f_x == f_y)
				fprintf(fout, "DA\n");
			else
				fprintf(fout, "NU\n");
		}
	}
	fclose(fin), fclose(fout);
	return 0;
}