Pagini recente » Cod sursa (job #1532189) | Cod sursa (job #2178814) | Cod sursa (job #1861130) | Cod sursa (job #1589809) | Cod sursa (job #1699653)
#include <stdio.h>
#define MAX 100005
int n, m, set[MAX], size[MAX], t, x, y;
void makeSet(int n){
for(int i = 1; i <= n; i++){
set[i] = i;
size[i] = 1;
}
}
int root(int x){
int r = x, aux;
while(r != set[r])
r = set[r];
while(x != r){
aux = set[x];
set[x] = r;
x = aux;
}
return r;
}
void merge(int x, int y){
if(size[x] < size[y])
set[x] = y;
else{
set[y] = x;
if(size[x] == size[y])
size[x]++;
}
}
int main(){
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d%d", &n, &m);
makeSet(n);
for(int i = 0; i < m; i++){
scanf("%d%d%d", &t, &x, &y);
if(t == 1)
merge(root(x), root(y));
else
printf(root(x) == root(y) ? "DA\n" : "NU\n");
}
return 0;
}