Cod sursa(job #2512541)

Utilizator CyborgSquirrelJardan Andrei CyborgSquirrel Data 21 decembrie 2019 11:32:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

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

int n, m;

int tre[200041];
void nuke(){
	for(int i = 1; i <= n; ++i){
		tre[i] = i;
	}
}

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

void reu(int a, int b){
	a = dad(a);
	b = dad(b);
	tre[a] = b;
}

bool fid(int a, int b){
	a = dad(a);
	b = dad(b);
	return (a==b);
}

int main(){
	fin >> n >> m;
	nuke();
	for(int i = 0; i < m; ++i){
		int op, a, b;
		fin >> op >> a >> b;
		if(op == 1){
			reu(a, b);
		}else{
			if(fid(a, b)){
				fout << "DA";
			}else{
				fout << "NU";
			}
			fout << "\n";
		}
	}
	return 0;
}