Pagini recente » Cod sursa (job #3038306) | Cod sursa (job #3249128) | Cod sursa (job #2524771) | Cod sursa (job #896916) | Cod sursa (job #3155266)
#include <bits/stdc++.h>
using namespace std;
class DSU{
private:
// parintele unui numar si vector de dimensiune pentru fiecare multime
vector<int> parent, sz;
public:
DSU(int n){
parent.resize(n + 1);
sz.resize(n + 1, 1);
// initializarea multimilor
for(int i = 1; i <= n; ++i){
parent[i] = i;
}
}
int findParent(int value){
// cand parintele unei multimi este elementul insusi
if(parent[value] == value){
return value;
}
return parent[value] = findParent(parent[value]);
}
void unite(int x, int y){
x = findParent(x), y = findParent(y);
if(sz[x] < sz[y]){
swap(x, y);
}
if(x == y){
return;
}
parent[y] = x;
sz[x] += sz[y];
}
};
int main(){
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int n, m;
fin >> n >> m;
DSU dsu(n);
for(int i = 0; i < m; ++i){
int tip, x, y;
fin >> tip >> x >> y;
if(tip == 1){
dsu.unite(x, y);
}
else{
if(dsu.findParent(x) == dsu.findParent(y)){
fout << "DA" << '\n';
}
else{
fout << "NU" << '\n';
}
}
}
return 0;
}