CFCF1498F.Christmas Game
提高+/省选-
官方
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
Alice 和 Bob 打算通过玩一个礼物树的游戏来庆祝圣诞节。这棵树有 n 个节点(编号为 1 到 n,以某个节点 r 作为根)。第 i 个节点上挂着 ai 个礼物。
在游戏开始前,会选择一个特殊的整数 k。游戏规则如下:
- Alice 先手,之后双方轮流行动;
- 每一回合,当前玩家可以选择某个深度至少为 k 的节点(比如 i),然后从该节点上取走任意正整数个礼物,记为 m(1≤m≤ai);
- 玩家将这 m 个礼物放到节点 i 的第 k 级祖先(记为 j)上(节点 i 的第 k 级祖先是指 i 是 j 的后代,且 j 的深度与 i 的深度之差恰好为 k)。此时,第 i 个节点的礼物数 ai 减少 m,第 j 个节点的礼物数 aj 增加 m;
- Alice 和 Bob 都会采取最优策略。无法进行操作的玩家判负。
对于每一个可能的树根,求出 Alice 和 Bob 谁会获胜。
注意:在以 r 为根的树中,节点 i 的深度定义为从根节点 r 到节点 i 的简单路径上的边数。根节点 r 的深度为 0。
输入格式
第一行包含两个用空格分隔的整数 n 和 k(3≤n≤105,1≤k≤20)。
接下来的 n−1 行,每行包含两个整数 x 和 y(1≤x,y≤n,x=y),表示在节点 x 和 y 之间有一条无向边。这些边构成一棵有 n 个节点的树。
最后一行包含 n 个用空格分隔的整数,表示数组 a(0≤ai≤109)。
输出格式
输出 n 个整数,第 i 个整数表示当以第 i 个节点为根时,Alice 是否能获胜。如果 Alice 获胜输出 1,否则输出 0。
输入输出样例
输入#1
5 1 1 2 1 3 5 2 4 3 0 3 2 4 4
输出#1
1 0 0 1 1
说明/提示
我们以节点 1 和节点 2 分别作为根节点,计算样例输入的答案。
以节点 1 为根时:
Alice 总是能获胜。可能的游戏过程如下:
- Alice 从节点 4 移动一个礼物到节点 3。
- Bob 从节点 5 移动四个礼物到节点 2。
- Alice 从节点 2 移动四个礼物到节点 1。
- Bob 从节点 2 移动三个礼物到节点 1。
- Alice 从节点 3 移动三个礼物到节点 1。
- Bob 从节点 4 移动三个礼物到节点 3。
- Alice 从节点 3 移动三个礼物到节点 1。
此时 Bob 无法再进行操作,因此 Bob 输了。
以节点 2 为根时:
Bob 总是能获胜。可能的游戏过程如下:
- Alice 从节点 4 移动四个礼物到节点 3。
- Bob 从节点 5 移动四个礼物到节点 2。
- Alice 从节点 3 移动六个礼物到节点 1。
- Bob 从节点 1 移动六个礼物到节点 2。
此时 Alice 无法再进行操作,因此 Alice 输了。