Cod sursa(job #957805)

Utilizator lucky1992Ion Ion lucky1992 Data 6 iunie 2013 01:31:47
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>


#define NMAX 100010
using namespace std;



int N,M, cod, u, v;
int parent[NMAX], height[NMAX];


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

void link( int x, int y){
		
		if( height[x] > height[y] )
			parent[y] = x;
		else{
			parent[x] = y;
		}	
		if( height[x] == height[y] )
			height[y] ++;
		
}
	
	
		
	
int main(){

    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
     
    scanf("%d %d ", &N, &M);
	
	for( int i = 1 ; i <= N; i++){
		parent[i] = i;
		height[i] = 1;
	}

	for( int i = 0 ; i < M; i++ ){
	  
	  scanf("%d %d %d", &cod, &u, &v);
	  
	  if( cod == 1 )
		link( set(u), set(v) );
	  else{
		if( set(u) == set(v) )
		printf("DA\n");
		else
		printf("NU\n");
	  }
	}
	
	return 0;
}