#P13625. [ICPC 2024 APC] Tree Quiz

[ICPC 2024 APC] Tree Quiz

题目描述

你的朋友想考考你。给你一棵有 nn 个节点的有根树,节点编号从 11nn。对于每个节点 ii,它的父节点是 pip_i,除了根节点(没有父节点的节点)的 pi=0p_i=0。如果节点 u=vu=v,或者节点 uu 是节点 vv 的父节点(如果存在)的祖先,那么我们说节点 uu 是节点 vv 的一个祖先。

如果节点 zz 同时是节点 xx 和节点 yy 的祖先,我们称节点 zz 是节点 xxyy 的一个共同祖先。如果节点 zz 是节点 xxyy 的一个共同祖先,并且节点 xxyy 的任何一个共同祖先也都是节点 zz 的祖先,那么我们称节点 zz 是节点 xxyy 的最近共同祖先。我们将节点 xxyy 的最近共同祖先表示为 LCA(x,y)\operatorname{LCA}(x,y)。特别地,LCA(x,x)=x\operatorname{LCA}(x,x)=x

你的朋友想要运行以下伪代码:

let L be an empty array
for x = 1 to n
  for y = 1 to n
    append ((x-1)*n*n + (LCA(x,y)-1)*n + (y-1)) to L
sort L in non-decreasing order

你的朋友有 qq 个问题,编号从 11qq。在第 jj 个问题中,会给你一个整数 kjk_j,并要求你找出数组 LL 中的第 kjk_j 个元素。请注意,LL 是以 11 为起始下标的,所以其下标范围从 11n2n^2。为了通过测试,你必须回答所有问题。

输入格式

输入的第一行包含两个整数 nnqq1n100,0001 \le n \le 100,0001q100,0001 \le q \le 100,000)。第二行包含 nn 个整数 p1,p2,,pnp_1, p_2, \dots, p_n(对于所有的 ii0pin0 \le p_i \le n)。保证给定的值代表一棵有根树。接下来的 qq 行每行包含一个整数。第 jj 行包含 kjk_j1kjn21 \le k_j \le n^2)。

输出格式

对于每个问题,按顺序输出一个整数作为问题的答案。

5 3
3 0 2 2 3
1
18
25
0
82
124

提示

输入中的树如图 K.1 所示。

LL 的元素为 $(0, 6, 8, 12, 14, 30, 31, 32, 33, 34, 56, 58, 60, 62, 64, 80, 81, 82, 84, 93, 106, 108, 110, 112, 124)$。