Pagini recente » Cod sursa (job #3219679) | Cod sursa (job #2204832) | Cod sursa (job #2822495) | Cod sursa (job #2248570) | Cod sursa (job #1611871)
#include <fstream>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int vert_nr, edge_nr, op, x, y, father[100005], dsu_depth[100005];
void merge_dsu(int node_1, int node_2);
int find_root(int node);
void read() {
cin >> vert_nr >> edge_nr;
for(int i = 1; i <= vert_nr; ++i) {
father[i] = i;
}
for(int i = 1; i <= edge_nr; ++i) {
cin >> op >> x >> y;
if(op == 1) {
merge_dsu(x, y);
}
else {
if(find_root(x) == find_root(y)) {
cout << "DA\n";
}
else {
cout << "NU\n";
}
}
}
}
int find_root(int node) {
if(father[node] == node) {
return node;
}
return find_root(father[node]);
}
void merge_dsu(int node_1, int node_2) {
int root_1 = find_root(node_1);
int root_2 = find_root(node_2);
if(dsu_depth[root_1] < dsu_depth[root_2]) {
father[root_1] = root_2;
}
else if(dsu_depth[root_1] > dsu_depth[root_2]) {
father[root_2] = root_1;
}
else {
father[root_2] = root_1;
++dsu_depth[root_2];
}
}
int main() {
read();
return 0;
}