Cod sursa(job #957800)

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



using namespace std;


int N,M, cod, u, v;

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

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

void join( int x, int y, int parent[], int height[] ){

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


	ifstream in("disjoint.in");
	ofstream out("disjoint.out");

	in >> N >> M;
	int parent[N+1];
	int height[N+1];

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