Pentru această operație este nevoie să te autentifici.

Cod sursă (job #77657)

Utilizator avatar Master011 Martac Dragos Master011 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;
}