首页 > 其他 > 详细

Codeforces 1006E

时间:2018-07-21 21:59:24      阅读:157      评论:0      收藏:0      [点我收藏+]
#include<bits/stdc++.h>
using namespace std;
const int maxn = 200005;

int dfn[maxn],rdfn[maxn],children[maxn];
vector<int> graph[maxn];
int n,q,cnt;

int dfs(int u){
    int ret = 1;
    dfn[u] = cnt;
    rdfn[cnt++] = u;
    for(int i = 0;i < graph[u].size();++i){
        int to = graph[u][i];
        ret += dfs(to);
    }
    return children[u] = ret;
}

int main(){
    scanf("%d%d",&n,&q);
    int temp;
    for(int i = 2;i <= n;++i){
        scanf("%d",&temp);
        graph[temp].push_back(i);
    }
    children[1] = dfs(1);
    int v,numb;
    for(int i = 0;i < q;++i){
        scanf("%d%d",&v,&numb);
        if(children[v] < numb) printf("-1\n");
        else printf("%d\n",rdfn[dfn[v] + numb - 1]);
    }
    return 0;
}

dfs序的使用。。。。

Codeforces 1006E

原文:https://www.cnblogs.com/tiberius/p/9347997.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!