QOJ.ac

QOJ

Limite de temps : 1.0 s Limite de mémoire : 256 MB Points totaux : 100 Hackable ✓

#15424. 海龟汤

Statistiques

一个公司由 $n$ 名成员组成,员工 ID 分别为 $1, 2, \dots, n$。成员 1 是老板,其他每个成员 $i$($2 \le i \le n$)都有一个直接主管 $f_i$($1 \le f_i < i$)。公司结构形成一棵以成员 1 为根的有根树。

在这家公司中,成员 $a$ 认识成员 $b$ 当且仅当满足以下条件中的至少一条:

  • $a = b$。
  • $b$ 是 $a$ 的祖先。换句话说,存在一个序列 $u_1, u_2, \dots, u_k$($2 \le k$)使得 $u_1 = a$,$u_k = b$,且对于所有 $2 \le i \le k$ 都有 $u_i = f_{u_{i-1}}$。
  • $b$ 是 $a$ 的直接孩子($b$ 是 $a$ 的直接下属)。换句话说,$f_b = a$。

请注意,认识关系不一定是对称的;$a$ 认识 $b$ 并不意味着 $b$ 认识 $a$。

现在,成员们正在玩一个游戏。在每一轮中,一个特定的成员 $m$ 担任猜测者,另一个成员 $p$ 是目标。保证 $p$ 是一个 $m$ 不认识的成员。

为了确定 $p$ 的身份,$m$ 提出一系列问题。对于每个问题,$m$ 选择一个 ID $x$ 并询问:“$p$ 认识成员 $x$ 吗?”成员 $p$ 总是如实回答。此外,如果 $x = p$,$p$ 会特别透露自己就是成员 $x$,此时游戏结束。

每个问题都会根据公司树产生一定的移动代价。如果第 $i$ 个问题涉及成员 $x_i$,则该问题的代价为 $dis(x_{i-1}, x_i)$,其中 $dis(a, b)$ 是树上 $a$ 和 $b$ 之间唯一路径上的边数。对于第一个问题($i = 1$),代价为 $dis(m, x_1)$。

成员 $m$ 非常聪明,他会使用最优策略,以最小化在最坏情况下保证游戏结束所需的总代价。你的任务是为每个可能的猜测者 $m \in \{1, 2, \dots, n\}$ 计算这个最小的最坏情况代价。

如果成员 $m$ 已经认识公司中的所有人,则该 $m$ 的答案为 0。

输入格式

输入的第一行包含一个整数 $n$($1 \le n \le 10^5$),表示公司中的总成员数。

第二行包含 $n - 1$ 个整数,表示 $f_2, f_3, \dots, f_n$。满足 $1 \le f_i < i$。

输出格式

输出单行,包含 $n$ 个整数,表示 $m = 1, m = 2, \dots, m = n$ 时的答案。整数之间应以空格分隔。

样例

输入样例 1

3
1 1

输出样例 1

0 2 2

输入样例 2

5
1 1 3 2

输出样例 2

4 3 3 4 4

输入样例 3

6
1 1 2 2 3

输出样例 3

4 3 5 4 4 6

说明

为了解释样例 3 中 $m = 4$ 的情况:首先,如图所示,成员 $m$ 不认识成员 $\{3, 5, 6\}$。一种可能的最优策略是,首先询问 $p$ 是否认识成员 2,代价为 1。如果是,则表明 $p = 5$,下一步是询问成员 5 以结束游戏,总代价为 2。否则,继续询问 $p$ 是否认识成员 3,代价为 2。如果 $p = 3$,游戏结束,总代价为 3。否则,表明 $p = 6$,下一步花费 1 的代价询问成员 6,游戏结束,总代价为 4。因此,该策略在最坏情况下的代价为 4。可以证明,没有其他策略可以进一步降低最坏情况下的询问代价。

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.