Pagini recente » Cod sursa (job #3359975) | Cod sursa (job #3359978) | Cod sursa (job #3359960) | Cod sursa (job #3359959) | Cod sursa (job #3359970)
#include <fstream>
#include <vector>
using namespace std;
struct Padure_compresie {
vector<int> padre;
Padure_compresie(int n) {
padre.resize(n + 1);
}
int rad(int a) {
if (padre[a] == 0) {
return a;
}
padre[a] = rad(padre[a]);
return padre[a];
}
void join(int a, int b) {
a = rad(a);
b = rad(b);
if (a != b) {
padre[a] = b;
}
}
bool query(int a, int b) {
return rad(a) == rad(b);
}
};
struct Padure_small_to_large {
vector<int> padre;
vector<int> sz;
Padure_small_to_large(int n) {
padre.resize(n + 1);
sz.resize(n + 1, 1);
}
int rad(int a) {
if (padre[a] == 0) {
return a;
}
return rad(padre[a]);
}
void join(int a, int b) {
a = rad(a);
b = rad(b);
if (a == b) { return; }
if (sz[a] > sz[b]) {
swap(a, b);
}
padre[a] = b;
}
bool query(int a, int b) {
return rad(a) == rad(b);
}
};
int main() {
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int n, m; cin >> n >> m;
Padure_compresie disjoint(n);
for (int i = 0; i < m; i++) {
int op; cin >> op;
int a, b; cin >> a >> b;
if (op == 1) {
disjoint.join(a, b);
} else if (disjoint.query(a, b)) {
cout << "DA\n";
} else {
cout << "NU\n";
}
}
return 0;
}