Pagini recente »
Istoria paginii runda/simulareoni2022editia2
|
Istoria paginii runda/alexsec/clasament
|
Monitorul de evaluare
|
Istoria paginii utilizator/nusuntroman
|
Cod sursă (job #310640)
Cod sursă (job
#310640)
#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];
bool vst[MAX_N + 1];
bool vdr[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)
{
vst[cr] = 1;
vdr[last] = 1;
st[cr] = last;
dr[last] = cr;
}
last = cr;
doOrder(dr[cr], last);
}
void solve()
{
int last = -1;
doOrder(root, last);
}
void afis(int v[], bool viz[])
{
int i;
for(i = 1; i <= n; i ++)
{
if(viz[i] == 0)
v[i] = 0;
fprintf(g, "%d ", v[i] - 1);
}
fprintf(g, "\n");
}
void getFirst()
{
int i;
i = 1;
while(i <= n && vst[i] == 1)
i ++;
first = i;
}
void printFile()
{
g = fopen("pointeri.out", "w");
getFirst();
fprintf(g, "%d\n", first - 1);
afis(st, vst);
afis(dr, vdr);
fclose(g);
}
int main()
{
readFile();
solve();
printFile();
return 0;
}