Cod sursa(job #2686413)

Utilizator CyborgSquirrelJardan Andrei CyborgSquirrel Data 19 decembrie 2020 09:46:06
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

int n, m;
int dad[100041];
int hai[100041];

int dan(int a){
	if(a != dad[a]){
		dad[a] = dan(dad[a]);
	}
	return dad[a];
}

void pakpak(int a, int b){
	dad[b] = a;
	hai[a] += hai[b];
}

void uni(int a, int b){
	a = dan(a);b = dan(b);
	if(hai[a] >= hai[b]){
		pakpak(a, b);
	}else{
		pakpak(b, a);
	}
}

bool inu(int a, int b){
	return dan(a) == dan(b);
}

int main(){
	// ios_base::sync_with_stdio(false);
	fin >> n >> m;
	for(int i = 1; i <= n; ++i){
		dad[i] = i;
		hai[i] = 1;
	}
	
	for(int i = 0; i < m; ++i){
		int op, a, b;
		fin >> op >> a >> b;
		if(op == 1){
			uni(a, b);
		}else{
			if(inu(a, b)){
				fout << "DA\n";
			}else{
				fout << "NU\n";
			}
		}
	}
	return 0;
}