Pagini recente » Cod sursa (job #362359) | Cod sursa (job #868533) | Cod sursa (job #3123661) | Cod sursa (job #2807434) | Cod sursa (job #2917467)
// #include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
class DisjointSet {
public:
DisjointSet(int size) {
padre.resize(size + 1);
set_size.resize(size + 1);
}
void join(int x, int y) {
x = rad(x);
y = rad(y);
if (set_size[x] > set_size[y]) {
swap(x, y);
}
padre[x] = y;
set_size[y] += set_size[x];
}
bool sameSet(int x, int y) {
return (rad(x) == rad(y));
}
private:
vector<int> padre;
vector<int> set_size;
int rad(int x) {
if (padre[x] == 0) {
return x;
} else {
padre[x] = rad(padre[x]);
return padre[x];
}
}
};
int main() {
int n, m; cin >> n >> m;
DisjointSet padure(n);
for (int i = 0; i < m; i++) {
int op, x, y; cin >> op >> x >> y;
if (op == 1) {
padure.join(x, y);
} else if (padure.sameSet(x, y)) {
cout << "DA\n";
} else {
cout << "NU\n";
}
}
return 0;
}