Pagini recente » Istoria paginii runda/16_februarie_simulare_oji_2024_clasa_10/clasament | Cod sursa (job #2589684) | Cod sursa (job #1719877) | Cod sursa (job #2057867) | Cod sursa (job #1699651)
#include <stdio.h>
const int 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(set[x] == set[y] ? "DA\n" : "NU\n");
}
return 0;
}