感受
思路
#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;
}



京公网安备 11010502036488号