Cod sursă (job #646325)

Utilizator avatar guzgandemunte Ionescu Laura guzgandemunte IP ascuns
Problemă Pointeri Compilator cpp-32 | 1,01 kb
Rundă Arhiva de probleme Status evaluat
Dată 3 apr. 2022 16:25:20 Scor 100
#include <bits/stdc++.h>
#include <fstream>

#define NMAX 200000

using namespace std;

ifstream fin("pointeri.in");
ofstream fout("pointeri.out");

int l[NMAX], r[NMAX];
int main()
{
    int n, first;
    stack <int> st;

    fin >> n >> first;
    for (int i = 0; i < n; ++i) fin >> l[i];
    for (int i = 0; i < n; ++i) fin >> r[i];

    int node = first, prev = -1, prim, tmp;
    while (node != -1 || !st.empty()) {
        if (node != -1) {
            st.push(node);
            node = l[node];
        }
        else {
            node = st.top(), st.pop();
            tmp = r[node];
            if (prev != -1) r[prev] = node;
            else prim = node;
            l[node] = prev;
            prev = node;
            node = tmp;
        }
    }

    r[prev] = -1;

    fout << prim << '\n';
    for (int i = 0; i < n; ++i) fout << l[i] << " ";
    fout << '\n';
    for (int i = 0; i < n; ++i) fout << r[i] << " ";

    fin.close();
    fout.close();
    return 0;
}