Pagini recente »
Istoria paginii runda/simulare
|
Cod sursă (job #720024)
|
Monitorul de evaluare
|
Monitorul de evaluare
|
Cod sursă (job #77200)
Cod sursă (job
#77200)
#include <cstdio>
#include <algorithm>
#define Nmax 200000+10
#define st first
#define dr second
using namespace std;
pair <int,int> sol[Nmax];
int fiu[Nmax][3];
int tata[Nmax],a[Nmax];
int i,n,nr,x,rad,t;
bool sel[Nmax];
int main()
{
freopen("pointeri.in","r",stdin);
freopen("pointeri.out","w",stdout);
scanf("%d %d", &n, &rad);
for (i=0; i<n; ++i)
{
scanf("%d", &fiu[i][1]);
tata[fiu[i][1]]=i;
}
for (i=0; i<n; ++i)
{
scanf("%d", &fiu[i][2]);
tata[fiu[i][2]]=i;
}
nr=0; x=rad;
while (t<n)
{
if (fiu[x][1]==-1 || sel[fiu[x][1]]) {if (!sel[x]) a[++t]=x, sel[x]=true;}
else {x=fiu[x][1]; continue;}
if (fiu[x][2]==-1 || sel[fiu[x][2]]) x=tata[x];
else x=fiu[x][2];
}
a[0]=a[n+1]=-1;
for (i=1;i<=n;++i)
{
sol[a[i]].st=a[i-1];
sol[a[i]].dr=a[i+1];
}
printf("%d\n", a[1]);
for (i=0;i<n;++i) printf("%d ", sol[i].st);
printf("\n");
for (i=0;i<n;++i) printf("%d ", sol[i].dr);
return 0;
}