Pagini recente » Cod sursa (job #474091) | Cod sursa (job #3290568) | Cod sursa (job #1940438) | Cod sursa (job #2054368) | Cod sursa (job #2435808)
#include <stdio.h>
#include <string.h>
inline int read() {
int n = 0;
char c = getchar_unlocked();
while (!('0' <= c && c <= '9')) {
c = getchar_unlocked();
}
while ('0' <= c && c <= '9') {
n = (n << 3) + (n << 1) + c - '0';
c = getchar_unlocked();
}
return n;
}
int find (int x, int parent[]) {
int root, temp;
for (root = x; parent[root] != root ; root = parent[root]);
while (parent[x] != x) {
temp = parent[x];
parent[x] = root;
x = temp;
}
return root;
}
void unite (int x, int y, int parent[], int rang[]) {
if (rang[x] > rang[y]) {
parent[y] = x;
} else {
parent[x] = y;
}
if (rang[x] == rang[y]) {
++rang[x];
}
}
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int n, m, x, y, query;
n = read(), m = read();
int parent[n + 1], rang[n + 1];
memset(rang, 1, sizeof(rang));
for (int i = 1 ; i <= n ; ++i) {
parent[i] = i;
}
for (; m ; --m) {
query = read(), x = read(), y = read();
switch (query) {
case 1: unite(find(x, parent), find(y, parent), parent, rang);
break;
case 2: if (find(x, parent) == find(y, parent)) {
putchar('D'), putchar('A'), putchar('\n');
} else {
putchar('N'), putchar('U'), putchar('\n');
}
break;
default: break;
}
}
return 0;
}