Cod sursa(job #3323978)

Utilizator apoputoaievladVlad Cristian Apoputoaie apoputoaievlad Data 20 noiembrie 2025 17:13:50
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <vector>

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

void dfs(int nod, vector<int> &st, vector<vector<int>> &adj,
    vector<vector<pair<int, int>>> &op, vector<int> &ans) {
    st.push_back(nod);
    for (auto o: op[nod]) {
        if (st.size() <= o.first) {
            continue;
        }
        ans[o.second] = st[st.size() - o.first - 1];
    }

    for (auto i: adj[nod]) {
        dfs(i, st, adj, op, ans);
    }
    st.pop_back();
}

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

    vector<vector<int>> adj(n + 5, vector<int>());
    vector<int> roots;
    for (int i = 1; i <= n; i++) {
        int nod; cin >> nod;

        if (nod != 0) {
            adj[nod].push_back(i);
        } else {
            roots.push_back(i);
        }
    }

    vector<vector<pair<int, int>>> op(n + 5, vector<pair<int, int>>());
    vector<int> ans(q + 5, 0);
    for (int i = 1; i <= q; i++) {
        int nod, k; cin >> nod >> k;

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

    vector<int> st;
    for (auto root: roots) {
        dfs(root, st, adj, op, ans);
    }

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