Cod sursa(job #229320)

Utilizator vladcyb1Vlad Berteanu vladcyb1 Data 9 decembrie 2008 21:32:41
Problema Paduri de multimi disjuncte Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.77 kb
#include <stdio.h>

#define NMAX 100001
#define MMAX 100001
#define FIN "disjoint.in"
#define FOUT "disjoint.out"

int P[NMAX];


int getParent( int x )
{
	int t = x, y;
	while ( t != P[t] ) t = P[t];
	while ( x != P[x] ) {
		y = P[x];
		P[x] = t;
		x = y;
	}
	return t;
}

void unify( int x, int y )
{
	P[getParent( x )] = getParent( y );
}


		

int main()
{
	FILE *fin = fopen( FIN, "r" );
	FILE *fout = fopen( FOUT, "w" );
	int N, M, cod, i, x, y;

	fscanf( fin, "%d%d", &N, &M );
	for( i = 1; i <= N; P[i++] = i );
	while ( M-- ) {
		fscanf( fin, "%d%d%d", &cod, &x, &y );
		if ( cod == 1 ) unify( x, y );
		else 
			if ( getParent(x) == getParent(y) )
				fprintf( fout, "DA\n" );
			else 
				fprintf( fout, "NU\n" );
	}
	fclose( fin );
	fclose( fout );

	return 0;
}