Cod sursa(job #957801)

Utilizator lucky1992Ion Ion lucky1992 Data 6 iunie 2013 00:50:38
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <iostream>

#define NMAX 100010
using namespace std;


int N,M, cod, u, v;
int parent[NMAX], height[NMAX];
void makeSet( int parent[], int height[] ){
	
	for( int i = 0 ; i < N; 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(){


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

	in >> N >> M;
	
	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;
	  }
	}
	in.close();
//	out.close();
	return 0;
}