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;
}

注意!此信息未认证,请谨慎判断信息的真实性!

全部评论
空

相关内容推荐

头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像 头像
点赞 评论 收藏
转发
头像 头像
点赞 评论 收藏
转发
头像 会员标识 头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
2022-12-20 07:39
门头沟学院_2023
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
2022-12-22 18:27
天津大学_2023
点赞 评论 收藏
转发
头像 头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 收藏 评论
分享

全站热榜

正在热议