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