欢迎来到起遇信息学
起遇信息学正处于上线筹建阶段,以下功能已全部开放免费体验: ✅ 完整题库浏览与代码提交评测(C / C++ / Python / Java 等) ✅ 入门到进阶的系列课程试读、作业与考试 ✅ AI 提示、AI 作业分析等智能助教功能 ✅ 赛事模拟与个人能力报告 ✅ 邮箱注册开放 ⏳ 付费课程订阅与微信/支付宝支付通道 ⏳ 手机号登录,微信扫码登录、微信公众号绑定 使用中如遇任何问题,欢迎通过页面底部 **"联系我们"** 与我们沟通。
CF1006E.Military Problem
Military Problem
题目描述
你需要帮助伯兰军队设计命令传递系统!
伯兰军队中一共有 个军官。第一个官员是军队统帅他没有上级。其他每位军官都有且仅有一名直属上级。如果一个军官 是军官 的直属上级,那么你也可以说军官 就是军官 的直属下属。
如果满足下列条件,那么军官 就是军官 的下属(直接或非直接):
- 是 的直属上级。
- 的直属上级是 的下属。
举个例子,下图的官员 的下属有: 。

所以,在伯兰军队的结构中,除了统帅,其他人都是统帅的下属。
伯兰军队可以看作一棵拥有 个节点的树,节点 就代表了军官 。根(即节点 )就相当于军队统帅。
兰战争部要求你处理 个查询,第 个查询格式为 ,其中 是某位军官, 是一个正整数。
处理第 个查询时,需要模拟命令从 号军官向其下属传播的过程。这里采用典型的深度优先搜索(即 DFS)算法。
假设当前 号军官正在传播命令。他会选择一位 号直属下属(即节点 的儿子节点),要求满足这位直属下属还没有接收过此命令。若存在多个可选下属,则选择编号最小者。随后, 号军官将命令传递给 号军官。之后, 号军官会以相同算法向其子树传播命令。当 号军官完成传播后, 号军官会继续选择下一个直属下属(采用相同策略)。当 号军官无法选择任何未接收命令的下属时,命令传播终止。
同样的,回到上面那张图:

如果军官 下达了命令,军官们收到命令的顺序是: 。
如果军官 下达了命令,军官们收到命令的顺序是: 。
如果军官 下达了命令,军官们收到命令的顺序是:。
如果军官 下达了命令,军官们收到命令的顺序是: 。
这 个查询互不干扰。换句话说,这 次查询下达的都是不同的命令,相互之间不会有任何影响。
输入格式
第一行包括两个整数 ,表示有 个军官和 个查询 ($2 \le n \le 2 \times 10^5,1 \le q \le 2 \times 10^5$) 。
第二行包括 个整数 (),表示编号为 的军官的直属上级为 。编号为 的军官,即军队统帅,他没有上级,因此不会输入。
接下来 行,每行包含两个整数 ()。其中 表示开始下达命令的军官, 表示要输出的军官编号是第几个得知命令的。
输出格式
一共 行,每行包含一个整数表示第 个查询的答案:编号为 的军官下达命令后,第 个得知此命令的军官编号是多少,如果传达人数不足 个,请输出 。
说明/提示
Translate by
样例
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
建议全屏模式获得最佳体验
| 进入全屏编程 | Alt+E |
| 递交评测 | Ctrl+Enter |
| 注释/取消注释 | Ctrl+/ |
| 缩放字体 | Ctrl+滚轮 |