#loj5355. 「OOI 2025 Day 1」梦想无害

「OOI 2025 Day 1」梦想无害

[AdditionalFile5355.zip](file://AdditionalFile5355.zip?type=additional_file)

#5355. 「OOI 2025 Day 1」梦想无害

标签: 传统 | 时间限制: 2000 ms | 内存限制: 256 MiB |

题目描述

题目译自 Open Olympiad in Informatics 2025 Day1 T3 「Мечтать не вредно / Dreaming is not harmful

在一家婚礼机构 M,员工们面临大规模裁员的风险。然而,员工们却无心工作,而是忙于计算在理想情况下自己需要多少天才能成为公司负责人。

公司的组织结构是一棵悬挂的树,根节点为编号为 11 的顶点。员工编号为 vv 的直接上级是编号为 pvp_v 的员工。员工 vv 的能力水平由参数 svs_v 表示,每个员工的能力水平各不相同。能力水平越高,员工对公司的价值越大。需要注意的是,由于招聘过程的不透明,可能存在能力较低的员工担任能力较高员工的上级的情况。

由于大规模的人事调整,每天都会有一位总经理(位于工作层级的根节点)被解雇。如果公司还有员工,职位将由能力水平最高的直接下属接任。原总经理的其他下属将成为新总经理的下属。有关更多细节,请参考样例解释。

每位员工都轻易计算出了自己需要多少天才能成为总经理。然而,许多人不愿意等待那么久,因为担任总经理只有一天的机会!为了加速这一过程,他们愿意「取消」一位同事。被「取消」的员工能力水平会降至 00,因为没有人再愿意与其合作。

你需要回答 qq 个查询。在第 kk 个查询中,编号为 vkv_k 的员工想知道,如果他“取消”恰好一位同事,自己最少需要多少天才能成为公司负责人。所有查询都是独立的假设场景,员工的实际能力水平在所有查询中保持不变。

输入格式

第一行包含两个整数 nnqq (2n300000,1qn)(2 \leq n \leq 300000, 1 \leq q \leq n),分别表示员工数量和查询数量。

第二行包含 n1n-1 个整数 p2,p3,,pnp_2, p_3, \ldots, p_n (1pi<i)(1 \leq p_i < i),表示编号为 22nn 的员工的直接上级。

第三行包含 nn 个整数 s1,s2,,sns_1, s_2, \ldots, s_n (1sin)(1 \leq s_i \leq n),表示员工的能力水平。保证所有能力水平各不相同。

第四行包含 qq 个整数 v1,v2,,vqv_1, v_2, \ldots, v_q (1vin)(1 \leq v_i \leq n),表示查询中涉及的员工编号。保证所有 viv_i 各不相同。

输出格式

输出 qq 个整数,用空格分隔,分别表示员工 v1,v2,,vqv_1, v_2, \ldots, v_q 最少需要多少天才能成为总经理。

样例

输入

5 4
1 2 2 1
3 5 1 2 4
5 3 1 4

输出

1 3 0 2

在样例中,编号为 55 的员工可以在 11 天内成为总经理。为此,只需「取消」编号为 22 的员工。公司结构的变化如下:

编号为 33 的员工可以在 33 天内成为总经理。为此,只需「取消」编号为 5544 的员工。如果“取消”编号为 55 的员工,公司结构的变化如下:

编号为 11 的员工已经是公司负责人,因此对于相应的查询,答案为 00

编号为 44 的员工可以在 22 天内成为总经理。类似上述示例,只需「取消」编号为 55 的员工即可。

数据范围与提示

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 分值 附加限制 子任务依赖 备注
11 1010 pi=1p_i = 1pi=i1p_i = i - 1,且 pi=1p_i = 1 的情况不超过两个编号 ii
22 66 11 pi=1p_i = 1pi=i1p_i = i - 1
33 88 n50n \leq 50q50q \leq 50 00
44 1313 n1000n \leq 1000q1000q \leq 1000 0,30, 3
55 1111 q100q \leq 100 0,30, 3
66 99 pi=i2p_i = \lfloor \frac{i}{2} \rfloor
77 1111 0,3,60, 3, 6 任意员工的上级数量*不超过 100100
88 1414 对于任意 i>1i > 1si>spis_i > s_{p_i}
99 1818 080 \sim 8