Pagini recente » Cod sursa (job #2309020) | Cod sursa (job #2189508) | Cod sursa (job #1542557) | Cod sursa (job #1655675) | Cod sursa (job #1563015)
#include <cstdio>
using namespace std;
const int nmx = 100002;
int n,m,rang[nmx],tata[nmx];
int grupa(int val){
int tatal = val,aux;
while(tata[tatal] != tatal)
tatal = tata[tatal];
while(val != tata[val]){
aux = tata[val];
tata[val] = tatal;
val = aux;
}
return tatal;
}
void uneste(int g1, int g2){
if(rang[g2] > rang[g1])
tata[g1] = g2;
else
tata[g2] = g1;
if(rang[g2] == rang[g1])
++ rang[g1];
}
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;
tata[i] = i;
}
int cond,a,b,g1,g2;
for(int i = 1; i <= m; ++i){
scanf("%d %d %d", &cond, &a, &b);
g1 = grupa(a);
g2 = grupa(b);
if(cond == 1)
uneste(g1,g2);
else
printf("%s\n", g1 == g2 ? "DA" : "NU");
}
return 0;
}