Pagini recente » Cod sursa (job #743277) | Cod sursa (job #2262439) | Cod sursa (job #1444863) | Cod sursa (job #2784047) | Cod sursa (job #656763)
Cod sursa(job #656763)
#include <algorithm>
#include <stdio.h>
using namespace std;
#define N_MAX 100001
int tata[N_MAX], grad[N_MAX];
int op, x, y;
int n, m;
int radacina(int x){
int rad, aux;
for(rad = x; rad != tata[rad]; rad = tata[rad]);
for(; x != tata[x];){
aux = tata[x];
tata[x] = rad;
x = aux;
}
}
void uneste(int x, int y){
if(grad[x] > grad[y]){
tata[y] = tata[x];
grad[x] += grad[y];
}
else{
tata[x] = tata[y];
grad[y] += grad[x];
}
}
int main(){
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i ++)
tata[i] = i, grad[i] = 1;
for(int i = 0; i < m; i ++){
scanf("%d %d %d", &op, &x, &y);
if(op == 1)
uneste(x, y);
else
if(radacina(x) == radacina(y))
printf("DA\n");
else
printf("NU\n");
}
return 0;
}