Cod sursa(job #496025)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 27 octombrie 2010 16:37:57
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <stdio.h>

int N, M, cod, X, Y;
int T[100001], rx, ry;

int radacina (int f)
{
	while (T[f] > 0)
		f = T[f];
	return f;
}

int main ()
{
	FILE *f1 = fopen ("disjoint.in", "r");
	FILE *f2 = fopen ("disjoint.out", "w");

	fscanf (f1, "%d%d", &N, &M);
	for (int i = 1; i <= N; T[i++] = -1);
	
	while ( M-- )
	{
		fscanf (f1, "%d%d%d", &cod, &X, &Y);
		rx = radacina (X);
		ry = radacina (Y);
		
		if (cod == 1)
			if (rx < ry)
				T[rx] += T[ry], T[ry] = rx;
			else
				T[ry] += T[rx], T[rx] = ry;
		else
			if (rx == ry)
				fprintf (f2, "DA\n");
			else
				fprintf (f2, "NU\n");		
	}
	
	
	fclose (f1);
	fclose (f2);
	
	return 0;
}