Pagini recente » Cod sursa (job #1617263) | Cod sursa (job #1191106) | Cod sursa (job #957592) | Cod sursa (job #2158314) | Cod sursa (job #1341374)
#include <cstdio>
using namespace std;
#define inFile "disjoint.in"
#define outFile "disjoint.out"
#define MAX_N 100001
int r[MAX_N];
int h[MAX_N];
inline int findSet(int x) {
while(x != r[x])
x = r[x];
return x;
}
inline void unionSet(int x, int y) {
if(h[x] == h[y])
++h[x], r[y] = x;
else if(h[x] < h[y])
r[x] = y;
else
r[y] = x;
}
int main() {
freopen(inFile, "r", stdin);
freopen(outFile, "w", stdout);
int n, m, i, op, x, y, r1, r2;
scanf("%d %d", &n, &m);
for(i = 1; i <= n; i++)
r[i] = i, h[i] = 1;
for(i = 1; i <= m; i++) {
scanf("%d %d %d", &op, &x, &y);
if(op == 1) {
r1 = findSet(x);
r2 = findSet(y);
unionSet(r1, r2);
}
else {
if(findSet(x) == findSet(y))
printf("DA\n");
else
printf("NU\n");
}
}
return 0;
}