CF115A Party
题目描述
一家公司有 $n$ 名员工,编号从 $1$ 到 $n$。每位员工要么没有直属经理,要么有且仅有一位直属经理,这位经理是另一位编号不同的员工。若满足以下至少一条,则称员工 $A$ 是员工 $B$ 的上级:
- 员工 $A$ 是员工 $B$ 的直属经理;
- 员工 $B$ 有一位直属经理 $C$,且员工 $A$ 是员工 $C$ 的上级。
公司中不会出现管理层级的环路。也就是说,不存在某位员工是其直属经理的上级。
今天公司要举办一场聚会,需要将所有 $n$ 名员工分成若干组:每位员工必须且只能属于一组。此外,在同一组内,不能存在两位员工 $A$ 和 $B$,使得 $A$ 是 $B$ 的上级。
请问,最少需要分成多少组?
输入格式
第一行包含一个整数 $n$($1 \leq n \leq 2000$),表示员工人数。
接下来的 $n$ 行,每行包含一个整数 $p_i$($1 \leq p_i \leq n$ 或 $p_i = -1$)。每个 $p_i$ 表示第 $i$ 位员工的直属经理编号。如果 $p_i = -1$,表示第 $i$ 位员工没有直属经理。
保证没有员工是自己的直属经理(即 $p_i \neq i$),且不会出现管理层级的环路。
输出格式
输出一个整数,表示聚会分组的最小组数。
说明/提示
对于第一个样例,三组就足够了,例如:
- 员工 1
- 员工 2 和 4
- 员工 3 和 5
由 ChatGPT 4.1 翻译