Pagini recente » Cod sursa (job #683853) | Cod sursa (job #933897) | Cod sursa (job #513834) | Cod sursa (job #1471587) | Cod sursa (job #1464578)
#include <stdio.h>
#define MAX_N 100000
int father[MAX_N];
int height[MAX_N];
static inline int getFather(int x) {
int r = x;
while (father[r] != r) {
r = father[r];
}
while (father[x] != r) {
int tmp = father[x];
father[x] = r;
x = tmp;
}
return r;
}
int main(void) {
FILE *f = fopen("disjoint.in", "r");
FILE *g = fopen("disjoint.out", "w");
int n, m;
int a, b;
char opType;
fscanf(f, "%d%d\n", &n, &m);
for (int i = 0; i < n; i++) {
father[i] = i;
height[i] = 1;
}
for (int i = 0; i < m; i++) {
opType = fgetc(f);
fscanf(f, "%d%d\n", &a, &b);
a = getFather(a - 1);
b = getFather(b - 1);
if (opType == '1') {
if (a != b) {
if (height[a] > height[b]) {
height[a]++;
father[b] = a;
} else {
height[b]++;
father[a] = b;
}
}
} else {
fputs((a == b) ? "DA\n" : "NU\n", g);
}
}
fclose(f);
fclose(g);
return 0;
}