感受
思路
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 2e5 + 10; int n, q; vector<int> G[maxn]; int in[maxn], out[maxn], dfn; int f[maxn]; void dfs(int u){ in[u] = ++dfn; f[in[u]] = u; for(auto v : G[u]){ dfs(v); } out[u] = dfn; } int main(){ scanf("%d%d", &n, &q); int u, k; for(int i = 2; i <= n; i++){ scanf("%d", &u); G[u].push_back(i); } dfs(1); while(q--){ scanf("%d%d", &u, &k); int t = in[u] + k - 1; if(t > out[u]) puts("-1"); else{ printf("%d\n", f[t]); } } return 0; }