Pagini recente » Cod sursa (job #607188) | Cod sursa (job #2516215) | Cod sursa (job #995562) | Cod sursa (job #714387) | Cod sursa (job #2628756)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
class DisjointSet {
private:
vector<int>parent;
public:
DisjointSet(const int& size) {
parent.resize(size + 1,-1);
}
void collapse(int node, int root) {
while(node != root) {
int aux = parent[node];
parent[node] = root;
node = aux;
}
}
int _find(int node) {
int root = node;
while(parent[root] > 0)
root = parent[root];
collapse(node,root);
return root;
}
void _union(int x,int y) {
parent[y] = x;
}
};
int n, m, type, x, y;
int main() {
f >> n >> m;
DisjointSet disjoint(n);
while(m--) {
f >> type >> x >> y;
int rootX = disjoint._find(x);
int rootY = disjoint._find(y);
if(type == 1) {
disjoint._union(rootX,rootY);
} else {
g << (rootX == rootY ? "DA" : "NU") << '\n';
}
}
return 0;
}