QOJ.ac

QOJ

时间限制: 4 s 内存限制: 1024 MB 总分: 100

#9184. 团队编程

统计

Eindhoven Gigantic Open-Source Institute (EGOI) 的公司结构呈现出非常明显的层级关系。除了 CEO Anneke 之外,公司里的其他 $N - 1$ 名员工每人都有一个唯一的直接上司,且层级结构中不存在环。你可以将公司层级结构看作一棵以 Anneke 对应的顶点为根的树。由于这是一家多元化的公司,员工们使用 $K$ 种不同的编程语言进行编程,但每位员工都有且仅有一种偏好的编程语言。

Anneke 有一个供公司团队完成的大型新项目。她希望尽可能多地投入资源到这个项目中。为了决定由哪个团队来负责该项目,她执行以下操作:

  1. 选择一个人作为团队负责人。这也确定了项目所使用的编程语言。团队负责人子树中所有偏好相同编程语言的员工都将参与该项目。
  2. 通过将偏好与团队负责人相同编程语言的员工调入她的团队,来增加参与项目的员工人数。

为了最大化参与项目的员工人数,她可以执行任意次数的以下交换操作:

  1. 她选择两名员工:
    • 一名当前在团队负责人子树内,且偏好的编程语言与团队负责人不同的员工。
    • 一名当前不在该子树内,且偏好的编程语言与团队负责人相同的员工。此外,该员工需要与另一名被选中的员工处于同一层级;也就是说,他们到 Anneke 的汇报链中需要有相同数量的上级。如果你将公司层级结构想象成一棵树,那么这两名员工处于树的同一深度。
  2. 这两名员工(且仅有他们——不涉及其他员工)在公司层级结构中交换位置。注意,汇报给这两名受影响员工的下属保持原位,只是改变了他们的汇报对象。在下方的示例中,假设选择了员工 4 作为团队负责人,我们可以交换员工 3 和 2,但不能交换员工 1 和 8。

求出你能达到的参与新项目的最大员工人数,以及达到该人数所需的最少交换操作次数。

输入格式

输入的第一行包含两个整数 $N$ 和 $K$,分别表示 EGOI 的员工人数和员工可能使用的编程语言数量。

EGOI 的员工编号从 $0$ 到 $N - 1$,CEO Anneke 的编号为 $0$。下一行包含 $N$ 个整数 $\ell_i$($0 \le \ell_i < K$),表示员工偏好的编程语言。

接下来的 $N - 1$ 行包含公司结构。第 $i$ 行包含一个整数 $b_i$($0 \le b_i < N$),表示第 $i$ 名员工的直接上司。注意 $i$ 的取值范围为 $1$ 到 $N - 1$(包含),因为 CEO Anneke 没有上司。

输出格式

输出一行,包含两个整数 $P$ 和 $S$,分别表示通过任意次数的交换所能达到的参与新项目的最大员工人数(包括团队负责人),以及达到该人数所需的最少交换次数。

数据范围

  • $1 \le N \le 10^5$
  • $1 \le K \le N$
子任务 分值 限制
1 12 对于所有 $1 \le i < N$,员工 $i$ 的直接上司是 $i - 1$
2 19 $K \le 2$
3 27 每种编程语言最多有 10 名员工偏好它
4 23 $N \le 2000$
5 19 无额外限制

样例

在样例 1 和样例 2 中,公司结构如下所示,其中图案编码了编程语言(0 = “条纹”,1 = “点状”,2 = “空白”):

样例 1 的图

样例 2 的图

在样例 1 中,我们可以选择员工 1 作为团队负责人,此时员工 4 偏好相同的编程语言,且没有可能的交换操作可以改进结果。在样例 2 中,整个公司有 3 名员工偏好语言 0,这也是 Anneke 偏好的语言,因此选择 Anneke 作为团队负责人可以得到一个大小为 3 的团队,且无需任何交换。

样例 3 的图

样例 4 的图

在样例 3 中,我们选择员工 4 作为团队负责人,然后我们可以让员工 1 和 8 以及 2 和 3 交换团队,从而得到总共 4 名偏好与 4 相同的语言(语言 2,空白)的员工。在样例 4 中,通过选择员工 6 作为团队负责人并交换员工 4 和 7 以及 1 和 5,可以获得最大分数。注意,我们不能在选择团队负责人之前交换员工 6 和 3 来获得 4 分,因为我们必须先确定团队负责人。

样例输入 1

5 3
0 1 2 2 1
0
1
2
3

样例输出 1

2 0

样例输入 2

4 2
0 1 0 0
0
0
1

样例输出 2

3 0

样例输入 3

9 3
0 0 2 1 2 0 2 1 2
4
8
1
0
4
1
0
7

样例输出 3

4 2

样例输入 4

8 3
0 2 1 2 2 1 1 1
6
3
0
6
3
0
3

样例输出 4

3 2

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

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.