题号:NC237140
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
Alice 和 Bob 是两个在森林里砍树的人。
一个森林一个是由零个或多棵树构成的集合。一棵树是没有环的连通图。一颗有根树有一个特别的叫做根的节点。定义点

的父节点是在根到点

的路径上里点

最近的一个点。点

的子节点是以点

为父节点的节点们。我们称一个点是叶子当且仅当它没有子节点。
在这个问题中,我们定义一个点的深度为这个点到根的简单路径上包含的点的数量,这棵树的秩是它深度最小的那个叶子的深度。
初始时这里有一个有根森林,Alice 和 Bob 在这个森林上玩游戏。他们交替进行决策,其中 Alice 为先手,Bob 为后手。在他们的回合开始的时候,该玩家选择森林中的一颗树,然后选择一个正的「裁剪深度」,它不应该超过这棵树的秩。然后他将深度不超过「裁剪深度」的点移除,其他点变成一些树。一个连通块所代表的树的新的根为,在本次删点之前,深度最小的点。然后它们会加入森林,然后游戏继续。
当轮到某位玩家进行操作时,森林为空,那么他就输了。
问你当两人都采用最优策略时,谁会赢。
输入描述:
第一行输入一个整数
(
)。
对于每组数据,第一行输入
个整数
(
),表示森林。如果第
为
,第
个点为一棵树的根,否则
为节点
的父亲。
保证
的总和不超过
。
输出描述:
对于每组数据,如果 Alice 赢,输出"YES",否则输出 "NO"。
示例1
输入
复制
4
4
0 1 0 3
7
0 1 2 0 4 5 6
4
0 1 1 2
7
0 1 1 2 2 3 3
说明
在第一个测试案例中,Bob 有一个对称策略,所以 Alice 不可能获胜。
在第二个测试用例中,Alice 可以选择第二棵树和切割深度为 1 来获得一个她有对称策略的森林。
在第三个测试用例中,唯一一棵树的秩是 2,Alice 的两种可能的移动都会导致失败。Bob 要么可以为自己制定一个对称策略的森林,要么删除森林。
在第四个测试用例中,所有叶子都具有相同的深度,因此 Alice 可以一步删除森林。
备注:
原题链接:https://codeforces.com/problemset/problem/1585/G