#HK4960. 「EGOI2024」团队编程
「EGOI2024」团队编程
题目描述
题目译自 European Girls' Olympiad in Informatics 2024 Day1 T3. Team Coding
在埃因霍温巨型开源研究所(Eindhoven Gigantic Open-Source Institute, EGOI),公司结构极为等级分明。除了首席执行官安妮克外,其余 名员工每人都有一个唯一的直接上司,且公司层级中不存在循环。你可以把公司层级想象成一棵以安妮克为根的树。作为一家多元化的公司,员工使用 种不同的编程语言,每位员工有且只有一种偏好的编程语言。
安妮克为公司的一个团队安排了一个大型新项目,她希望投入尽可能多的资源。为此,你需要帮助她按照以下步骤组建团队:
- 选择一名员工作为团队负责人。这也将决定项目的编程语言。负责人子树中所有偏好相同编程语言的员工将加入项目。
- 通过交换员工,增加参与项目的员工数量,交换的对象是偏好与负责人相同编程语言的员工。
为了最大化参与项目的员工数量,你可以任意多次执行以下交换操作:
- 选择两名员工:
- 一名员工当前在负责人的子树中,且偏好的编程语言与负责人不同。
- 另一名员工不在该子树中,且偏好与负责人相同的编程语言。此外,这两名员工必须处于同一层级,即他们在通向安妮克的汇报链中有相同数量的上级。在公司层级树中,他们位于树的同一层。
- 这两名员工(仅限他们,不包括其他员工)在公司层级中交换位置。注意,汇报给这两名员工的下属保持原位,仅变更他们的直接上司。
例如,在下图中,若选择员工 为负责人,你可以交换员工 和 ,但不能交换员工 和 。

你的任务是找出参与新项目的最大员工数量,以及实现这一目标所需的最少交换次数。
输入格式
第一行包含两个整数 ,分别表示 EGOI 的员工数量和可能使用的编程语言数量。
员工编号从 到 ,安妮克(首席执行官)为 号。下一行包含 个整数 ,表示员工偏好的编程语言。
接下来的 行描述公司结构。第 行包含一个整数 ,表示第 名员工的直接上司。注意, 从 到 ,因为安妮克没有上司。
输出格式
输出一行,包含两个整数 ,分别表示通过任意次数交换可达到的参与新项目的最大员工数量(包括负责人)以及实现此目标所需的最少交换次数。
5 3
0 1 2 2 1
0
1
2
3
2 0
前两个样例的公司结构如下图所示,其中图案表示编程语言( = “条纹”, = “点状”, = “纯色”):

在第一个样例中,选择员工 作为负责人,员工 偏好相同的编程语言,没有可行的交换来增加人数。
4 2
0 1 0 0
0
0
1
3 0
在第二个样例中,公司有 名员工偏好语言 ,这也是安妮克偏好的语言,因此选择安妮克为负责人可组成 人的团队,无需交换。
9 3
0 0 2 1 2 0 2 1 2
4
8
1
0
4
1
0
7
4 2

在第三个样例中,选择员工 为负责人,然后让员工 和 、 和 交换团队,可得到 名偏好与 相同语言(,黄色/纯色)的员工。
8 3
0 2 1 2 2 1 1 1
6
3
0
6
3
0
3
3 2
在第四个样例中,选择员工 为负责人,并交换员工 和 、 和 ,可获得最大人数。注意,在选择负责人前不能交换员工 和 以得到 人的团队,因为必须先确定负责人。
数据范围与提示
对于所有输入数据,满足:
详细子任务附加限制及分值如下表所示。
| 子任务 | 分值 | 附加限制 |
|---|---|---|
| 对于所有 ,员工 的直接上司是 | ||
| 每种编程语言最多有 名员工偏好 | ||
| 无附加限制 |