CF2006E.Iris's Full Binary Tree

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Iris 喜欢满二叉树。

我们定义一棵有根树的深度为从某个顶点到根的简单路径上顶点的最大数量。深度为 dd 的满二叉树是一棵深度为 dd 且恰好有 2d−12^d - 1 个顶点的二叉树。

Iris 称一棵树为 dd-二叉树,如果可以通过添加一些顶点和边,使其变为一棵深度为 dd 的满二叉树。注意,满二叉树的根可以任选任意顶点。

由于在大树上操作很困难,她定义了一棵树的二叉深度为满足该树是 dd-二叉树的最小 dd。具体地说,如果不存在整数 d≥1d \ge 1 使得该树是 dd-二叉树,则该树的二叉深度为 −1-1。

现在,Iris 有一棵仅包含顶点 11 的树。她想再添加 n−1n-1 个顶点,形成一棵更大的树。她会依次添加这些顶点。当她添加第 ii 个顶点(2≤i≤n2 \leq i \leq n)时,会给你一个整数 pip_i(1≤pi<i1 \leq p_i < i),并添加一条连接顶点 ii 和 pip_i 的新边。

Iris 想请你告诉她,对于每个 1≤i≤n1 \le i \le n,由前 ii 个顶点组成的树的二叉深度是多少。你能告诉她答案吗?

输入格式

每个测试用例包含多组数据。第一行包含一个整数 tt(1≤t≤1041 \leq t \leq 10^4)——表示测试用例的数量。接下来是每组测试用例的描述。

每组测试用例的第一行包含一个整数 nn(2≤n≤5⋅1052 \leq n \leq 5 \cdot 10^5)——表示树的最终大小。

第二行包含 n−1n-1 个整数 p2,p3,…,pnp_2, p_3, \ldots, p_n(1≤pi<i1 \leq p_i < i)——描述树的所有边。

保证所有测试用例中 nn 的总和不超过 5⋅1055 \cdot 10^5。

输出格式

对于每组测试用例,输出 nn 个整数,第 ii 个表示由前 ii 个顶点组成的树的二叉深度。

输入输出样例

  • 输入#1

    7
    3
    1 1
    6
    1 2 3 4 5
    7
    1 1 3 2 5 1
    10
    1 1 2 1 4 2 4 5 8
    10
    1 1 3 1 3 2 2 2 6
    20
    1 1 2 2 4 4 5 5 7 6 8 6 11 14 11 8 13 13 12
    25
    1 1 3 3 1 5 4 4 6 8 11 12 8 7 11 13 7 13 15 6 19 14 10 23

    输出#1

    1 2 2 
    1 2 2 3 3 4 
    1 2 2 3 3 4 4 
    1 2 2 3 3 3 4 4 5 5 
    1 2 2 3 3 4 4 4 -1 -1 
    1 2 2 3 3 4 4 4 4 5 5 5 5 6 6 6 6 6 6 7 
    1 2 2 3 3 4 4 4 4 5 5 6 6 6 6 6 7 7 7 7 7 8 8 8 8

说明/提示

在第一个测试用例中,最终的树如下图所示:

  • 仅包含顶点 11 的树的二叉深度为 11(该树本身就是深度为 11 的满二叉树)。
  • 包含顶点 11 和 22 的树的二叉深度为 22(我们可以添加顶点 33 使其成为深度为 22 的满二叉树)。
  • 包含顶点 11、22 和 33 的树的二叉深度为 22(该树本身就是深度为 22 的满二叉树)。

在第二个测试用例中,添加一些顶点后形成的满二叉树如下图所示(加粗的顶点为新添加的):

形成的满二叉树的深度为 44。

在第五个测试用例中,最终的树如下图所示:

可以证明,Iris 无法通过添加顶点和边形成任何满二叉树,因此二叉深度为 −1-1。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页