Pentru această operație este nevoie să te autentifici.
Cod sursă (job #77657)
Utilizator |
|
IP | ascuns |
---|---|---|---|
Problemă | Pointeri | Compilator | cpp | 1,07 kb |
Rundă | Tema 2 clasele 9-10 2014/15 | Status | evaluat |
Dată | 8 oct. 2014 09:14:23 | Scor | 100 |
#include <cstdio>
using namespace std;
FILE *in = fopen("pointeri.in","r");
FILE *out = fopen("pointeri.out","w");
const int LMax=200000;
struct simlst
{
int st,dr;
}v[LMax];
simlst calc(int nod)
{
int nodst=v[nod].st,noddr=v[nod].dr;
simlst x,y;
y.st=y.dr=nod;
int aux;
if(nodst!=-1){
x=calc(nodst);
aux=x.dr;
y.st=x.st;
v[aux].dr=nod;
v[nod].st=aux;
}
if(noddr!=-1){
x=calc(noddr);
aux=noddr;
aux=x.st;
y.dr=x.dr;
v[aux].st=nod;
v[nod].dr=aux;
}
return y;
}
int main(){
int n,rad;
fscanf(in,"%d%d",&n,&rad);
for(int i = 0 ; i < n ; ++i) fscanf(in,"%d",&v[i].st);
for(int i = 0 ; i < n ; ++i) fscanf(in,"%d",&v[i].dr);
simlst S=calc(rad);
fprintf(out,"%d\n",S.st);
for(int i = 0 ; i < n ; ++i){
fprintf(out,"%d ",v[i].st);
}
fprintf(out,"\n");
for(int i = 0 ; i < n ; ++i){
fprintf(out,"%d ",v[i].dr);
}
return 0;
}