Pagini recente »
Borderou de evaluare (job #808214)
|
Utilizatori înregistrați la probleme_a-7-a_2
|
Cod sursă (job #588993)
|
2022-02-10-clasa-6-concurs08-cursuri-performanta
|
Cod sursă (job #582160)
Cod sursă (job
#582160)
#include <cstdio>
#define MAX_N 200000
#define MAX_DEPTH 1000
using namespace std;
FILE *f, *g;
int n, root;
int st[MAX_N + 1];
int dr[MAX_N + 1];
void readFile()
{
f = fopen("pointeri.in", "r");
fscanf(f, "%d%d", &n, &root);
root ++;
int i;
for(i = 1; i <= n; i ++)
{
fscanf(f, "%d", &st[i]);
st[i] ++;
}
for(i = 1; i <= n; i ++)
{
fscanf(f, "%d", &dr[i]);
dr[i] ++;
}
fclose(f);
}
int first;
int stk[MAX_DEPTH + 1];
void doOrder(int cr, int &last)
{
if(cr <= 0)
return;
doOrder(st[cr], last);
if(last > 0)
{
st[cr] = last;
dr[last] = cr;
}
last = cr;
doOrder(dr[cr], last);
}
void solve()
{
int last = -1;
doOrder(root, last);
}
void afis(int v[])
{
int i;
for(i = 1; i <= n; i ++)
{
fprintf(g, "%d ", v[i] - 1);
}
fprintf(g, "\n");
}
void getFirst()
{
int i;
i = 1;
while(i <= n && st[i] > 0)
i ++;
first = i;
}
void printFile()
{
g = fopen("pointeri.out", "w");
getFirst();
fprintf(g, "%d\n", first - 1);
afis(st);
afis(dr);
fclose(g);
}
int main()
{
readFile();
solve();
printFile();
return 0;
}