bzoj#P4528. LotteryTree
LotteryTree
题目描述
你发行了一种彩票,并且有P人买了它。现在你要决定谁中奖。 你已经决定了用一个有根树来选择优胜者。你需要做的事情被列在下面:
- 参与者从1到P连续编号。
- 首先,你将树画在一个矩形的白板上,并需要满足以下条件: –树上的每一个结点对应白板上的一个圆圈。圆圈很小以至于你可以 忽略他们的大小。 –树上的每条边对应连接两个圈的线段。没有两条边相交。 –根节点一定画在白板的最上方。 –对于每个结点,连向它们儿子们的边都要向下走。(换句话说,父亲 必须画在儿子的上方。) –所有的叶子需画在白板的底边。 •接下来,你将白板的底边分成P段,每个叶子被恰好一条线段包含。将1 到P这些个不同的数字分配给每个线段,然后将数字标注在线段内的叶子上。 •现在,你要重复下述过程:找到一个空结点X,它的所有儿子都标注了数 字;如果有多个这样的结点,随机选择一个;然后在X的儿子中随机选 择一个,将这个儿子的数字标注在X上;当根节点被标上数字时过程结 束。 你会获得整数P和用于描述你使用的树的数组tree。这棵树有N个结点, 从0到N-1编号。结点0是树根。对于每个其他结点,它父亲的编号小于它的 编号。更正式的说,对于在1和N-1之间的i,tree[i]是结点i父亲的编号。 你想要让抽奖公平,即,保证每个参与者有相同的机率赢取大奖。为此,你可以 在合法的要求下选择怎样画这棵树,以及怎样分配数字到叶子上。回答“YES” (不需要引号)如果抽奖可以公平,否则回答“NO”。
输入格式
多组数据,读入到文件结束。 每组数据第一行读入两个整数N和P——所用树的大小以及参与者人数。 第二行读入N-1个整数,描述数组tree;其中第i个整数为tree[i]。
输出格式
每组数据输出单独一行一个单词“YES”或“NO”
0 0 0
10 2
0 0 0 1 1 2 2 3 3
10 3
0 0 1 1 2 2 4 4 4
9 3
0 0 1 1 1 3 3 3
YES
NO
NO
提示
P≤N≤100
题目来源
没有写明来源