QOJ.ac

QOJ

Limite de temps : 1 s Limite de mémoire : 1024 MB Points totaux : 100

#25. 反制法术

Statistiques

Magic: The Gathering 卡牌游戏有一个关于施放和反制法术的有趣机制。我们在此不作解释,因为它相当复杂,且对于解决本题并非必要。然而,如果你是一位 MtG 玩家,你可能会看出本题与法术反制机制之间的联系。

题目描述

对于每一棵有根树,都存在一种唯一的将顶点染成两种颜色(黑色和白色)的方法,满足以下约束: * 一个顶点为白色,当且仅当它拥有一个黑色儿子。

这种着色的唯一性可以通过归纳法轻松证明。我们将以这种方式着色的树称为“良构着色树”(well-colored)。

我们从一棵仅包含一个黑色顶点(根节点)的有根树开始,并执行 $n$ 次以下操作: * $add(v)$ —— 将一个新的黑色顶点作为顶点 $v$ 的儿子添加到树中。然后,反转树中某些(可能为零,可能为全部)顶点的颜色,使得结果树依然是良构着色树。

对于每次操作,我们希望知道在此过程中有多少个顶点的颜色被反转。

输入格式

树的根节点编号为 $0$,其他顶点按照添加到树中的顺序编号为 $1, 2, \dots, n$。

输入的第一行包含一个整数 $n$ ($1 \le n \le 200000$),表示顶点添加的次数。 接下来 $n$ 行,第 $i$ 行包含一个整数 $v_i$,表示第 $i$ 次操作中添加的顶点的父亲编号。保证顶点 $v_i$ 在第 $i$ 次操作前已经存在,即 $v_i < i$。

输出格式

对于每次操作,输出一行,包含在此操作中颜色被反转的顶点数量。

子任务

子任务 分值 最大 $N$ 附加约束
1 20 1000
2 20 10000
3 20 100000
4 20 200000 最终树的深度最多为 100
5 20 200000

样例

输入 1

5
0
1
2
1
3

输出 1

1
2
3
2
2

说明

每次操作后的情况如下所示(在之前操作中被反转的顶点已高亮显示):

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.