Pagini recente » Cod sursa (job #1695824) | Cod sursa (job #3292794) | Cod sursa (job #1050452) | Cod sursa (job #1225113) | Cod sursa (job #1540457)
#include <cstdio>
const int maxN = 100000;
int father[maxN + 1];
int grad[maxN + 1];
void init(int n) {
for(register int i = 1; i <= n; ++ i) {
father[i] = i;
grad[i] = 1;
}
}
int root(int node) {
int x = node;
while (x != father[x])
x = father[x];
int y = node;
while (y != father[y]) {
int _y = y;
y = father[y];
father[_y] = x;
}
return x;
}
bool areJoined(int fnode, int snode) {
return root(fnode) == root(snode);
}
void join(int fnode, int snode) {
fnode = root(fnode);
snode = root(snode);
if (fnode != snode) {
if (grad[fnode] < grad[snode]) {
father[fnode] = snode;
grad[snode] += grad[fnode];
} else {
father[snode] = fnode;
grad[fnode] += grad[snode];
}
}
}
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int N, M;
scanf("%d %d", &N, &M);
init(N);
while(M --) {
int op, a, b;
scanf("%d %d %d", &op, &a, &b);
if(op == 1)
join(a, b);
else
printf("%s\n", areJoined(a, b) ? "DA" : "NU");
}
return 0;
}