Pagini recente » Cod sursa (job #1512273) | Cod sursa (job #2771066) | Cod sursa (job #2216977) | Cod sursa (job #1195001) | Cod sursa (job #2976233)
#include <cstdio>
#include <memory>
#include <vector>
using namespace std;
class DisjointSet{
private:
int setSize;
vector<int> parent, rank;
public:
DisjointSet(int size){
setSize = size + 1;
parent.resize(setSize);
rank.resize(setSize);
for (int i = 1; i < setSize; ++i) {
parent[i] = i;
rank[i] = 1;
}
}
int findParent(int k) {
if (parent[k] != k)
parent[k] = findParent(parent[k]);
return parent[k];
}
void unite(int a, int b) {
a = findParent(a);
b = findParent(b);
if (rank[a] == rank[b]) {
parent[a] = b;
++rank[b];
return;
}
if (rank[a] > rank[b])
swap(a,b);
parent[a] = b;
}
};
class Solver{
private:
public:
Solver() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
}
~Solver() {
fclose(stdin);
fclose(stdout);
}
void execute() {
int N, M;
int op, x, y;
scanf("%d%d", &N, &M);
DisjointSet dSet(N);
for (int i = 1; i <= M; ++i) {
scanf("%d%d%d", &op, &x, &y);
if (op == 1)
dSet.unite(x, y);
else
printf(dSet.findParent(x) == dSet.findParent(y) ? "DA\n" : "NU\n");
}
}
};
int main() {
unique_ptr<Solver> s = make_unique<Solver>();
s->execute();
return 0;
}