Pagini recente » Cod sursa (job #1969044) | Cod sursa (job #1705957) | Cod sursa (job #1969045) | Cod sursa (job #1692898) | Cod sursa (job #1705908)
#include <stdio.h>
#define MAX_NODES 100000
int root[MAX_NODES + 1];
int size[MAX_NODES + 1];
int get_root(int node) {
while (node != root[node]) {
root[node] = root[root[node]];
node = root[node];
}
return node;
}
int find(int p, int q) {
return get_root(p) == get_root(q);
}
void unite(int p, int q) {
int i = get_root(p);
int j = get_root(q);
if (size[i] < size[j]) {
root[i] = j;
size[j] += size[i];
} else {
root[j] = i;
size[i] += size[j];
}
}
int main(void) {
FILE * fin = fopen("disjoint.in", "r");
FILE * fout = fopen("disjoint.out", "w");
int n, m, x, y, op;
fscanf(fin, "%d%d", &n, &m);
for (int i = 1; i <= n; i++) {
root[i] = i;
size[i] = 1;
}
for (int i = 0; i < m; i++) {
fscanf(fin, "%d%d%d", &op, &x, &y);
if (op == 1) {
unite(x, y);
} else {
if (find(x, y)) {
fprintf(fout, "DA\n");
} else {
fprintf(fout, "NU\n");
}
}
}
fclose(fin);
fclose(fout);
}