Pagini recente » Cod sursa (job #1982791) | Cod sursa (job #1135326) | Cod sursa (job #2594516) | Cod sursa (job #1020761) | Cod sursa (job #2690741)
#include <bits/stdc++.h>
int dad[100001], rang[100001];
int N, M;
void ReadFile(){
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
}
int Find(int x){
int R, y;
for(R = x;dad[R] != R;R = dad[R]);
while(dad[x] != x){
y = dad[x];
dad[x] = R;
x = y;
}
return R;
}
void Unite(int x, int y){
if(rang[x] > rang[y]) dad[y] = x;
else dad[x] = y;
if(rang[x] == rang[y]) rang[y]++;
}
int main(){
ReadFile();
scanf("%d%d", &N, &M);
for(int i = 1;i <= N;i++)
dad[i] = i, rang[i] = 1;
while(M--){
int op, x, y;
scanf("%d%d%d", &op, &x, &y);
if(op == 2){
if(Find(x) == Find(y)) printf("DA\n");
else printf("NU\n");
}else{
Unite(Find(x), Find(y));
}
}
}