Cod sursa(job #442063)

Utilizator dexter_dexMutascu Adrian - Dragos dexter_dex Data 13 aprilie 2010 20:41:54
Problema Paduri de multimi disjuncte Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<stdio.h>
#define Nmax 100005

int n, m, i, j, x, y, cod, a, b, c, d;
int v[Nmax], rang[Nmax];

int main (){
	freopen ("disjoint.in", "r", stdin);
	freopen ("disjoint.out", "w", stdout);
	
	scanf("%d %d", &n, &m);
	
	for (i = 1 ; i <= n ; i++)
		v[i] = i;
		
	for (i = 1 ; i <= m ; i++){
		scanf("%d %d %d", &cod, &x, &y);
		if (cod == 1){
			if (rang[v[x]] < rang[v[y]]){
				v[x] = v[y];
				rang[v[y]] ++;
			}
			else{
				v[y] = v[x];
				rang[v[x]]++;
			}
		}
		if (cod == 2){
			
			a = x;
			
			while (a != v[a]){
				a = v[a];
			}
			
			while (x != v[x]){
				b = v[x];
				v[x] = a;
				x = b;
			}
			
			c = y;
			
			while (c != v[c]){
				c = v[c];
			}
			
			while (x != v[x]){
				d = v[x];
				v[x] = c;
				x = d;
			}
			
			if (a == c) 
				printf("DA\n");
			else 
				printf("NU\n");
		}
	}
	
	return 0;
}