Military Problem

感受

思路


#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;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务