Mai intai trebuie sa te autentifici.
Cod sursa(job #255747)
Utilizator | Data | 10 februarie 2009 16:00:30 | |
---|---|---|---|
Problema | Paduri de multimi disjuncte | Scor | 100 |
Compilator | c | Status | done |
Runda | Arhiva educationala | Marime | 0.63 kb |
#include <stdio.h>
int N;
int T[100001], R[100001];
int find_progenitor(int a) {
int r;
for (r = 0; T[a]; ++r, a = T[a])
;
R[a] = r;
return a;
}
int main(int argc, char *argv[]) {
int a, b, op, ta, tb, M;
FILE *fi = fopen("disjoint.in", "r");
fscanf(fi, "%d %d", &N, &M);
FILE *fo = fopen("disjoint.out", "w");
while (M--) {
fscanf(fi, "%d %d %d", &op, &a, &b);
ta = find_progenitor(a);
tb = find_progenitor(b);
if (op == 1) {
if (R[ta] > R[tb])
T[tb] = ta;
else
T[ta] = tb;
} else {
if (ta == tb)
fprintf(fo, "DA\n");
else
fprintf(fo, "NU\n");
}
}
fclose(fo);
fclose(fi);
return 0;
}