Pagini recente »
Cod sursă (job #309952)
Cod sursă (job
#309952)
#include <stdio.h>
#include <stdlib.h>
#define NIL -1
#define NMAX 200000
int st[NMAX], dr[NMAX];
void transform (int pos, int *first, int *last) {
if (st[pos] != NIL)
transform(st[pos],first,last);
if (first == NIL)
*first = *last = pos;
else {
st[pos] = *last;
dr[*last] = pos;
*last = pos;
}
if (dr[pos] != NIL)
transform(dr[pos],first,last);
}
int main() {
FILE *fin, *fout;
int N, i, rad;
fin = fopen("pointeri.in","r");
fscanf(fin, "%d%d", &N, &rad);
for (i=0; i<N; ++i)
fscanf(fin, "%d", &st[i]);
for (i=0; i<N; ++i)
fscanf(fin, "%d", &dr[i]);
fclose(fin);
int first = -1, last = -1;
transform(rad, &first, &last);
fout = fopen("pointeri.out","w");
fprintf(fout, "%d\n", first);
for (i=0; i<N; ++i)
fprintf(fout, "%d ", st[i]);
fprintf(fout, "\n");
for (i=0; i<N; ++i)
fprintf(fout, "%d ", dr[i]);
return 0;
}