QOJ.ac

QOJ

Time Limit: 2.0 s Memory Limit: 512 MB Total points: 100

#24450. 快递服务

Statistics

公司中有 $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$ 之间的转移是他们共同经过的转移。

第二个样例中也有两名快递员,但他们的路线没有交集。

problem_24450_e427abc62b1ac89961b334b3dfb04578.png

第三个样例如上图所示。粗线表示员工之间的转移。细线表示第一名快递员在员工 $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 操作系统下运行的交互题解答。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.