Poachers
题号:NC237140
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

Alice 和 Bob 是两个在森林里砍树的人。

一个森林一个是由零个或多棵树构成的集合。一棵树是没有环的连通图。一颗有根树有一个特别的叫做根的节点。定义点 v 的父节点是在根到点 v 的路径上里点 v 最近的一个点。点 v 的子节点是以点 v 为父节点的节点们。我们称一个点是叶子当且仅当它没有子节点。

在这个问题中,我们定义一个点的深度为这个点到根的简单路径上包含的点的数量,这棵树的秩是它深度最小的那个叶子的深度。

初始时这里有一个有根森林,Alice 和 Bob 在这个森林上玩游戏。他们交替进行决策,其中 Alice 为先手,Bob 为后手。在他们的回合开始的时候,该玩家选择森林中的一颗树,然后选择一个正的「裁剪深度」,它不应该超过这棵树的秩。然后他将深度不超过「裁剪深度」的点移除,其他点变成一些树。一个连通块所代表的树的新的根为,在本次删点之前,深度最小的点。然后它们会加入森林,然后游戏继续。

当轮到某位玩家进行操作时,森林为空,那么他就输了。

问你当两人都采用最优策略时,谁会赢。

输入描述:

第一行输入一个整数 T ()。
对于每组数据,第一行输入 n 个整数 p (),表示森林。如果第 p_i0,第 i 个点为一棵树的根,否则 p_i 为节点 i 的父亲。
保证 n 的总和不超过

输出描述:

对于每组数据,如果 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

输出

复制
NO
YES
NO
YES

说明

在第一个测试案例中,Bob 有一个对称策略,所以 Alice 不可能获胜。

在第二个测试用例中,Alice 可以选择第二棵树和切割深度为 1 来获得一个她有对称策略的森林。

在第三个测试用例中,唯一一棵树的秩是 2,Alice 的两种可能的移动都会导致失败。Bob 要么可以为自己制定一个对称策略的森林,要么删除森林。

在第四个测试用例中,所有叶子都具有相同的深度,因此 Alice 可以一步删除森林。

备注:

原题链接:https://codeforces.com/problemset/problem/1585/G