Pagini recente » Cod sursa (job #2685506) | Cod sursa (job #1137894) | Cod sursa (job #1802640) | Cod sursa (job #293261) | Cod sursa (job #1464368)
#include <cstdio>
using namespace std;
const int nmx = 100005;
int n,m;
int rang[nmx], parinti[nmx];
int gaseste(int x){
int aux = x;
while(parinti[aux] != aux)
aux = parinti[aux];
while(x != parinti[x]){
int p = parinti[x];
parinti[x] = aux;
x = p;
}
return aux;
}
void uneste(int n1, int n2){
if(rang[n1] > rang[n2])
parinti[n2] = n1;
else parinti[n1] = n2;
if(rang[n1] == rang[n2])
++ rang[n2];
}
int main(){
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; ++i){
rang[i] = 1;
parinti[i] = i;
}
for(int i = 1; i <= m; ++i){
int c, n1, n2;
scanf("%d %d %d", &c, &n1, &n2);
if(c == 1)
uneste(gaseste(n1),gaseste(n2));
else if(gaseste(n1) == gaseste(n2))
printf("DA\n");
else
printf("NU\n");
}
return 0;
}