#CF1006E. Military Problem

Military Problem

题目描述

每个测试的时间限制:3 秒
每个测试的内存限制:256 兆字节

在这个问题中,你需要帮助伯兰军队组织他们的指挥传递系统。

伯兰军队中有 nn 名军官。第一名军官是军队的指挥官,他没有上级。其他每名军官恰好有一名直属上级。如果军官 aa 是军官 bb 的直属上级,那么也可以说军官 bb 是军官 aa 的直属下属。

如果满足以下条件之一,则称军官 xx 是军官 yy 的下属(直接或间接):

  • 军官 yy 是军官 xx 的直属上级;
  • 军官 xx 的直属上级是军官 yy 的下属。

例如,在下图中,军官 33 的下属有:5,6,7,8,95, 6, 7, 8, 9

伯兰军队的组织结构是:除了指挥官外,每名军官都是指挥官的下属。

正式地,我们将伯兰军队表示为一棵有 nn 个顶点的树,其中顶点 uu 对应军官 uu。顶点 uu 的父节点对应军官 uu 的直属上级。根节点(索引为 11)对应军队指挥官。

伯兰战争部命令你回答 qq 个查询,第 ii 个查询的形式为 (ui,ki)(u_i, k_i),其中 uiu_i 是某名军官,kik_i 是一个正整数。

处理第 ii 个查询时,想象一个命令从 uiu_i 向其下属传播。这里使用典型的 DFS(深度优先搜索)算法。

假设当前军官是 aa,他正在传播命令。军官 aa 选择一名尚未收到此命令的直属下属(即树中的一个子节点)bb。如果有多个这样的直属下属,则 aa 选择索引最小的那个。军官 aa 将命令传给军官 bb。之后,bb 使用相同的算法将其命令传播到其子树。当 bb 完成命令传播后,军官 aa 再选择下一个直属下属(使用相同的策略)。当军官 aa 无法选择任何尚未收到命令的直属下属时,军官 aa 完成命令传播。

请看下面的例子:

如果军官 11 传播命令,军官按以下顺序收到命令:[1,2,3,5,6,8,7,9,4][1,2,3,5,6,8,7,9,4]

如果军官 33 传播命令,军官按以下顺序收到命令:[3,5,6,8,7,9][3,5,6,8,7,9]

如果军官 77 传播命令,军官按以下顺序收到命令:[7,9][7,9]

如果军官 99 传播命令,军官按以下顺序收到命令:[9][9]

要回答第 ii 个查询 (ui,ki)(u_i, k_i),需要构造一个序列,描述如果第 uiu_i 名军官传播命令时,军官收到命令的顺序。返回构造列表中的第 kik_i 个元素,如果元素少于 kik_i 个,则返回 1-1

你应该独立处理查询。查询不会影响后续查询。

输入格式

第一行包含两个整数 nnqq2n21052 \le n \le 2 \cdot 10^51q21051 \le q \le 2 \cdot 10^5)—— 伯兰军队的军官人数和查询次数。

第二行包含 n1n-1 个整数 p2,p3,,pnp_2, p_3, \dots, p_n1pi<i1 \le p_i < i),其中 pip_i 是索引为 ii 的军官的直属上级的索引。指挥官索引为 11,他没有上级。

接下来 qq 行描述查询。第 ii 个查询由一对整数 (ui,ki)(u_i, k_i) 给出(1ui,kin1 \le u_i, k_i \le n),其中 uiu_i 是开始传播命令的军官索引,kik_i 是指令传播序列中所需军官的位置。

输出格式

输出 qq 行,其中第 ii 行是如果命令从军官 uiu_i 开始传播时,列表中第 kik_i 个位置的军官编号。如果收到命令的军官人数少于 kik_i,则输出 -1

你应该独立处理查询。它们不会相互影响。

9 6
1 1 1 3 5 3 5 7
3 1
1 5
3 4
7 3
1 8
1 9

3
6
8
-1
9
4