Pagini recente » Cod sursa (job #2350613) | Cod sursa (job #969209) | Cod sursa (job #3216594) | Cod sursa (job #2963366) | Cod sursa (job #532199)
Cod sursa(job #532199)
#include <cstdio>
using namespace std;
const int N = 100005;
int RG[N], t[N], n, m;
int find(int x) {
int R, y;
for(R = x; t[R] != R; R = t[R]);
for(;x != t[x];) {
y = t[x];
t[x] = R;
x = y;
}
return R;
}
void unite(int x, int y) {
if(RG[x] > RG[y])
t[y] = x;
else
t[x] = y;
if(RG[x] == RG[y])
++RG[y];
}
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int i, j, x, y, op;
scanf("%d %d", &n, &m);
for(i = 1; i<= n; ++i) {
t[i] = i;
RG[i] = 1;
}
for(i = 1; i <= m; ++i) {
scanf("%d %d %d", &op, &x, &y);
if(op == 2) {
if(find(x) == find(y))
printf("DA\n");
else
printf("NU\n");
}
else{
if(find(x) == find(y))
;
unite(find(x), find(y));
}
}
return 0;
}