Cod sursa(job #3324535)

Utilizator DavidDiacDavid Diac DavidDiac Data 22 noiembrie 2025 13:23:03
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");

const int NMAX = 300005;

vector<int> v[NMAX], roots;
vector<pair<int, int>> ops[NMAX];
int ans[NMAX];
vector<int> st;

void dfs(int nod) {
    st.push_back(nod);

    for (auto op: ops[nod]) {
        if (st.size() <= op.first) {
            continue;
        }
        ans[op.second] = st[st.size() - op.first - 1];
    }

    for (auto i: v[nod]) {
        dfs(i);
    }

    st.pop_back();
}

int main() {
    int n, q;
    cin >> n >> q;

    for (int i = 1; i <= n; i++) {
        int a; cin >> a;

        if (a == 0) {
            roots.push_back(i);
        } else {
            v[a].push_back(i);
        }
    }

    for (int i = 1; i <= q; i++) {
        int nod, k; cin >> nod >> k;

        ops[nod].push_back({k, i});
    }

    for (auto root: roots) {
        dfs(root);
    }

    for (int i = 1; i <= q; i++) {
        cout << ans[i] << '\n';
    }

    return 0;
}