信息
- ID
- 1532
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
棋子进入一棵子树后,会先取完其中所有硬币再离开,且不会再次进入。
令 sizv 为子树大小,getv 为在顶点 v 处由当前玩家先取根硬币时,先手最终得到的硬币数。偶数大小的儿子处理完后轮到同一方继续选择,其中先手所得不超过一半的应优先处理,超过一半的留到最后;奇数大小的儿子会交换下一次选择者,因此按 2getu−sizu 从小到大排列并交替归入双方。按这个次序累加各儿子的贡献,再加上顶点 v 的一枚硬币,就得到 getv。
由于父节点编号小于子节点,可以按编号逆序完成树形动态规划;所有奇数子树贡献的排序总复杂度为 O(nlogn),空间复杂度为 O(n),答案为 get1。