Cod sursa(job #957797)

Utilizator lucky1992Ion Ion lucky1992 Data 6 iunie 2013 00:20:00
Problema Paduri de multimi disjuncte Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <cstdio>
#include <vector>


#define fin "disjoint.in"
#define fout "disjoint.out"


using namespace std;

ifstream in(fin);
ofstream out(fout);

int N,M, cod, u, v;
int *parent, *height, *mul;

void makeSet( int parent[], int height[] ){
	
	for( int i = 0 ; i < N; i++ ){
	//	mul[i] = i;
		parent[i] = -1;
		height[i] = 0;
	}
}

int set( int u ){
	
	if( parent[u] == -1 )
		return u;
	parent[u] = set( parent[u] );
	return parent[u];
}

void join( int x, int y ){

	int px = set(x);
	int py = set(y);
	
	if( height[px] > height[py] )
		parent[py] = px;
	else{
		parent[px] = py;
		
		if( height[x] == height[y] )
			height[x] += 1;
	}
}
	
	
		
	
int main(){

	in >> N >> M;
	parent = new int[N];
	height = new int[N];
	mul = new int[N];

	makeSet( parent, height );
	for( int i = 0 ; i < M; i++ ){
	  
	  in >> cod >> u >> v;
	  if( cod == 1 )
		join( u, v );
	  else{
		if( set(u) == set(v) )
		out << "DA";
		else
		out << "NU";
		out << endl;
	  }
	}
	return 0;
}