zoukankan      html  css  js  c++  java
  • cf 1006E

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <string>
     5 #include <algorithm>
     6 #include <utility>
     7 #include <vector>
     8 #include <map>
     9 #include <queue>
    10 #include <stack>
    11 #include <cstdlib>
    12 #include <deque>
    13 #include <set>
    14 typedef long long ll;
    15 #define lowbit(x) (x&(-x))
    16 #define ls l,m,rt<<1
    17 #define rs m+1,r,rt<<1|1
    18 using namespace std;
    19 const int N=2e5+9;
    20 int n,k;
    21 vector<int>vec[N];
    22 int  size[N],id[N],sid[N];
    23 int index;
    24 void dfs(int u){
    25     id[u]=++index;//u在全遍历中的位置
    26     sid[index]=u;//在全遍历中位置为index的是u
    27     size[u]=1;//初始化容量为1
    28     for(int i=0;i<vec[u].size();i++){
    29         int v=vec[u][i];
    30         dfs(v);
    31         size[u]+=size[v];//每个数的实际容量
    32     }
    33 }
    34 int  main()
    35 {
    36     scanf("%d%d",&n,&k);
    37     int  x;
    38     for(int i=2;i<=n;i++){
    39         scanf("%d",&x);
    40         vec[x].push_back(i);
    41     }
    42     dfs(1);//预处理
    43     int u,v;
    44     for(int  i=0;i<k;i++){
    45         scanf("%d%d",&u,&v);
    46         if(v>size[u])  printf("-1
    ");
    47         else{
    48             printf("%d
    ",sid[id[u]+v-1]);//id[u]+v-1为从u开始遍历
    49             //时第v的数的位置
    50         }
    51     }
    52     return   0;
    53 }
  • 相关阅读:
    php获取文件后缀名格式
    猴子分桃问题2
    猴子吃桃问题1
    判断字符串中字母出现的次数用分割法
    成绩表
    二维数组所有元素求和输出
    冒泡排序
    1.8作业
    1.8
    1.6
  • 原文地址:https://www.cnblogs.com/tingtin/p/9327288.html
Copyright © 2011-2022 走看看