Pagini recente » Cod sursa (job #388841) | Cod sursa (job #420157) | Cod sursa (job #1435220) | Cod sursa (job #406954) | Cod sursa (job #3296554)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int parent[100000];
vector<int> rang(100000, 1);
int root(const int node) {
if (parent[node] == node) {
return node;
}
return parent[node] = root(parent[node]);
}
void join(int a, int b) {
int root_a = root(a);
int root_b = root(b);
if (root_a == root_b) {
return;
}
if (rang[a] < rang[b]){
swap(a, b);
}
parent[b] = a;
if (rang[a] == rang[b]) {
rang[a]++;
}
}
int main() {
ifstream input("disjoint.in");
ofstream output("disjoint.out");
int N, M;
input >> N >> M;
for (int q = 1; q <= N; q++) {
parent[q] = q;
}
for (int q = 0; q < M; q++) {
int type;
int x, y;
input >> type >> x >> y;
if (type == 1) {
join(parent[x], parent[y]);
} else {
if (root(x) == root(y)) {
cout << "DA\n";
} else {
cout << "NU\n";
}
}
}
return 0;
}