公司中有 $n$ 名员工,其中一人是总经理。除了总经理外,每名员工都恰好有一名直属上司。
每名员工负责自己明确规定的工作。如果员工 $a$ 需要完成员工 $b$ 所负责的工作,就必须向员工 $b$ 发送一份申请。根据公司规定,申请只能直接从员工传给其直属上司,或反过来从上司传给其直属下属。申请在员工之间逐个传递,直到到达员工 $b$。
为了减轻员工的负担,公司雇用了 $k$ 名快递员。编号为 $i$ 的快递员负责员工 $a_i$ 和 $b_i$ 这一对员工之间的申请递送。如果这对员工中的一人需要向另一人发送申请,就把申请交给快递员;快递员按照公司规定,依次在员工之间传递申请,直到申请经过所有必要的中间员工并送达收件人。在递送一份申请的过程中,快递员不会访问同一名员工超过一次。
为了优化开支,公司决定找到路线重合最多的一对快递员,停止使用其中一人的服务,并把他的工作交给另一人。定义一对快递员的重复程度为:员工与其直属上司之间的转移中,同时出现在两名快递员路线中的转移数量,不区分转移方向。
请编写一个程序,找出重复程度最大的一对快递员。
输入格式
第一行包含两个整数 $n$ 和 $k$,分别表示员工数量和快递员数量($2\le n,k\le2\cdot10^5$)。员工从 $1$ 到 $n$ 编号,总经理的编号为 $1$。
第二行包含 $n-1$ 个整数 $p_2,p_3,\ldots,p_n$,分别表示除总经理以外每名员工的直属上司编号($1\le p_i<i$)。
接下来的 $k$ 行,每行包含两个整数 $a_i$ 和 $b_i$,表示编号为 $i$ 的快递员所负责的一对员工的编号($1\le a_i,b_i\le n$;$a_i\ne b_i$)。同一对员工可以由多名快递员负责。
输出格式
第一行输出一个整数,表示两名快递员的最大重复程度。
第二行输出两个从 $1$ 到 $k$ 的不同整数,表示一对具有最大重复程度的快递员编号。如果有多对,可以输出任意一对。
说明
如果员工 $b$ 是员工 $a$ 的直属上司,或者员工 $a$ 的直属上司服从员工 $b$ 的指令,就称员工 $a$ 服从员工 $b$ 的指令。将申请从一名员工递送给服从其指令的某人的快递员(或沿反方向递送的快递员),自然可以称为重要快递员。
子任务
| 子任务编号 | 分数 | $n$ 的限制 | $k$ 的限制 | 额外限制 | 所需子任务 |
|---|---|---|---|---|---|
| 1 | 29 | $2\le n\le100$ | $2\le k\le100$ | — | |
| 2 | 12 | $2\le n\le4000$ | $2\le k\le1000$ | — | 1 |
| 3 | 7 | $2\le n\le10^5$ | $2\le k\le1000$ | — | 1–2 |
| 4 | 8 | $2\le n\le10^5$ | $2\le k\le5000$ | — | 1–3 |
| 5 | 10 | $2\le n\le10^5$ | $2\le k\le50\,000$ | 任意员工与总经理之间的转移次数不超过 20 | |
| 6 | 12 | $2\le n\le10^5$ | $2\le k\le50\,000$ | 每名快递员都是重要快递员 | |
| 7 | 12 | $2\le n\le10^5$ | $2\le k\le50\,000$ | — | 1–6 |
| 8 | 10 | $2\le n\le2\cdot10^5$ | $2\le k\le2\cdot10^5$ | — | 1–7 |
样例
输入格式 1
4 2 1 2 2 1 3 1 4
输出格式 1
1 2 1
输入格式 2
4 2 1 2 3 1 2 3 4
输出格式 2
0 1 2
输入格式 3
7 3 1 2 2 4 5 5 1 3 3 7 6 1
输出格式 3
2 2 3
输入格式 4
4 3 1 2 3 1 4 4 1 1 4
输出格式 4
3 2 1
说明
第一个样例中有两名快递员。第一名快递员将申请从员工 $1$ 递送给员工 $3$,或沿反方向递送。例如,从员工 $1$ 向员工 $3$ 递送申请时,他先将申请从员工 $1$ 传给员工 $2$,再从员工 $2$ 传给员工 $3$。第二名快递员将申请从员工 $1$ 递送给员工 $4$,或沿反方向递送。例如,从员工 $4$ 向员工 $1$ 递送申请时,他先从员工 $4$ 传给员工 $2$,再从员工 $2$ 传给员工 $1$。这对快递员的重复程度为 $1$,因为员工 $1$(总经理)与员工 $2$ 之间的转移是他们共同经过的转移。
第二个样例中也有两名快递员,但他们的路线没有交集。
第三个样例如上图所示。粗线表示员工之间的转移。细线表示第一名快递员在员工 $1$ 和 $3$ 之间的路线。长虚线表示第二名快递员在员工 $3$ 和 $7$ 之间的路线。短虚线表示第三名快递员在员工 $1$ 和 $6$ 之间的路线。
第一名和第二名快递员的路线只共同包含员工 $2$ 和 $3$ 之间的转移。第一名和第三名快递员的路线只共同包含员工 $1$ 和 $2$ 之间的转移。第二名和第三名快递员的路线共同包含两次转移:员工 $2$ 与 $4$ 之间,以及员工 $4$ 与 $5$ 之间。因此,编号为 $2$ 和 $3$ 的快递员组成的一对具有最大的重复程度,等于 $2$。
第四个样例中,所有快递员都在总经理和编号为 $4$ 的员工之间递送申请。因此,任意一对快递员的重复程度都等于 $3$。可以输出任意一对。
第二轮题目的一般信息
比赛期间获取解答评测结果
所有题目中,都可以不限次数地请求最终评测结果。对每个子任务,会给出该子任务的得分以及程序在每个测试点上的评测结果。
解答程序源代码大小限制
所有题目中,解答的源代码文件大小不得超过 256 KB。
测试流程
所有题目中,只有通过子任务的全部测试才能获得该子任务的分数。评分表中会给出每个子任务所需的子任务编号。只有通过所有所需子任务,才会运行该子任务的测试。
说明
对于输入数据量较大的题目,评委建议使用 C/C++ 语言组的选手选择 LINUX GNU C++ 编译器提交解答,并使用 scanf 读取数据。
请注意,本轮可以提交 Java 和 Python 解答,也可以提交在 Ubuntu Linux 操作系统下运行的交互题解答。