CF1006E.Military Problem

传统题 时间 2000 ms 内存 256 MiB 8 尝试 41 已通过 7 标签

Military Problem

题目描述

你需要帮助伯兰军队设计命令传递系统!

伯兰军队中一共有 nn 个军官。第一个官员是军队统帅他没有上级。其他每位军官都有且仅有一名直属上级。如果一个军官 aa 是军官 bb 的直属上级,那么你也可以说军官 bb 就是军官 aa 的直属下属。

如果满足下列条件,那么军官 xx 就是军官 yy 的下属(直接或非直接):

  1. yyxx 的直属上级。
  2. xx 的直属上级是 yy 的下属。

举个例子,下图的官员 33 的下属有: 5,6,7,8,95,6,7,8,9

所以,在伯兰军队的结构中,除了统帅,其他人都是统帅的下属。

伯兰军队可以看作一棵拥有 nn 个节点的树,节点 uu 就代表了军官 uu。根(即节点 11)就相当于军队统帅。

兰战争部要求你处理 qq 个查询,第 ii 个查询格式为 (ui,ki)(u_i, k_i),其中 uiu_i 是某位军官,kik_i 是一个正整数。

处理第 ii 个查询时,需要模拟命令从 uiu_i 号军官向其下属传播的过程。这里采用典型的深度优先搜索(即 DFS)算法。

假设当前 aa 号军官正在传播命令。他会选择一位 bb 号直属下属(即节点 aa 的儿子节点),要求满足这位直属下属还没有接收过此命令。若存在多个可选下属,则选择编号最小者。随后,aa 号军官将命令传递给 bb 号军官。之后,bb 号军官会以相同算法向其子树传播命令。当 bb 号军官完成传播后,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]

qq 个查询互不干扰。换句话说,这 qq 次查询下达的都是不同的命令,相互之间不会有任何影响。

输入格式

第一行包括两个整数 n,qn,q,表示有 nn 个军官和 qq 个查询 ($2 \le n \le 2 \times 10^5,1 \le q \le 2 \times 10^5$) 。

第二行包括 n1n-1 个整数 p2,p3pnp_{2},p_{3}\dots p_{n}1pi<i1\le p_i < i),表示编号为 ii 的军官的直属上级为 pip_{i}。编号为 11 的军官,即军队统帅,他没有上级,因此不会输入。

接下来 qq 行,每行包含两个整数 ui,kiu_{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-1

说明/提示

Translate by

https://www.luogu.com.cn/user/814130

样例

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

在线编程 IDE

建议全屏模式获得最佳体验