Cod sursa(job #2916977)

Utilizator george_buzasGeorge Buzas george_buzas Data 2 august 2022 16:14:27
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.66 kb
#include <fstream>
#include <vector>
#define MAX_NR_NODES 100000
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int node_labels[MAX_NR_NODES + 1];
vector<int> connected_components[MAX_NR_NODES + 1];

int main() {
	int nr_sets, nr_operations;
	fin >> nr_sets >> nr_operations;
	while (nr_operations) {
		int operations_type, node_1, node_2;
		fin >> operations_type >> node_1 >> node_2;
		if (operations_type == 2) {
			if (node_labels[node_1] == node_labels[node_2]) {
				fout << "DA\n";
			} else {
				fout << "NU\n";
			}
		} else {
			if (!node_labels[node_1]) {
				node_labels[node_1] = node_1;
				connected_components[node_1].push_back(node_1);
			}
			if (!node_labels[node_2]) {
				node_labels[node_2] = node_2;
				connected_components[node_2].push_back(node_2);
			}
			if (connected_components[node_labels[node_1]].size() > connected_components[node_labels[node_2]].size()) {
				int length = connected_components[node_labels[node_2]].size();
				int father_node = node_labels[node_2];
				for (int i = 0; i < length; ++i) {
					int neighbour = connected_components[father_node][i];
					connected_components[node_labels[node_1]].push_back(neighbour);
					node_labels[neighbour] = node_labels[node_1];
				}
			} else {
				int length = connected_components[node_labels[node_1]].size();
				int father_node = node_labels[node_1];
				for (int i = 0; i < length; ++i) {
					int neighbour = connected_components[father_node][i];
					connected_components[node_labels[node_2]].push_back(neighbour);
					node_labels[neighbour] = node_labels[node_2];
				}
			}
		}
		--nr_operations;
	}
	return 0;
}