描述
又是一个讲故事的题…
本质是有一棵(颠倒的)树, 除了根节点, 每个节点有(唯一一个)子节点. 初始时刻, 每个节点都有一颗苹果, 然后每过一个时间单位, 所有苹果都会坠落到它的子节点. 如果同时有n
个苹果坠落到同一个节点, 那么这些苹果会两两抵消(消失). 也就是n
为偶数, 结果是0
,否则为1
. 问最终(从根节点)可以收集到多少个苹果.
思路
所有苹果同步下降, 对于每个节点, 我们只关心它的所有父节点的贡献. 这样可以bfs层序遍历一下, 统计每层的苹果数量, 奇数对应1
, 偶数对应0
.
代码
1 | import collections |