Pagini recente » Rating Corpaci Daria (dariaana15) | Cod sursa (job #2469198) | Istoria paginii runda/concurs_11_12_02_23 | Borderou de evaluare (job #2854278) | Cod sursa (job #2916982)
#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 (!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 (operations_type == 2) {
if (node_labels[node_1] == node_labels[node_2]) {
fout << "DA\n";
} else {
fout << "NU\n";
}
} else {
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;
}