Cod sursa(job #2512518)

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

using namespace std;

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

int n, m;
int tre[100041], gr[100041];

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

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

int yelo(int a, int b){
	tre[a] = b;
	gr[b] += a;
}

void reu(int a, int b){
	a = dad(a);
	b = dad(b);
	if(gr[a] < gr[b]){
		yelo(a, b);
	}else{
		yelo(b, a);
	}
}

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

int main(){
	fin >> n >> m;
	ha();
	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;
}