Pagini recente » Cod sursa (job #1265511) | Cod sursa (job #762385) | Cod sursa (job #775542) | Cod sursa (job #3159590) | Cod sursa (job #3298500)
#include <bits/stdc++.h>
using namespace std;
struct disset{
vector<int> tata, rangv;
disset(int n): tata(n+1), rangv(n+1, 0) {
for(int i = 1; i <= n; ++i)
tata[i] = i;
}
int find(int x){
if(tata[x] != x)
tata[x] = find(tata[x]);
return tata[x];
}
void unite(int x, int y){
int rx = find(x);
int ry = find(y);
if(rx == ry) return;
if(rangv[rx] < rangv[ry]){
tata[rx] = ry;
}
else if(rangv[ry] < rangv[rx]){
tata[ry] = rx;
}
else{
tata[ry] = rx;
rangv[rx]++;
}
}
};
int main(){
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int N, M;
cin >> N >> M;
disset dsu(N);
while(M--){
int cod, x, y;
cin >> cod >> x >> y;
if(cod == 1){
dsu.unite(x, y);
}
else{
cout << (dsu.find(x) == dsu.find(y) ? "DA\n" : "NU\n");
}
}
}