P10053 [CCO2022] Bi-ing Lottery Treekets 讲解

· · 题解

P10053 [CCO2022] Bi-ing Lottery Treekets

题目考察:数论,组合数学,递推,树形 dp。
题目简述:
给定一棵有 n 个结点的树,有 k 个球,第 i 个球将被投放在树上的 x_i 号点上,但球的投放的顺序未确定,对于每次球被投放,他都会:

  1. 球刚被投放:
    • 若其左右儿子均没有球,则可以向任意方向往下滚。
    • 若左儿子或右儿子上有球,则向另一方向往下滚。
    • 若左儿子和右儿子上都有球,则结束行动。
    • 若该位置有球,则该方案不合法。
  2. 球是滚下来的:
    • 若其左右儿子均没有球,则向原来的方向往下滚。
    • 若左儿子或右儿子上有球,则向另一方向往下滚。
    • 若左儿子和右儿子上都有球,则结束行动。

定义 ans_i 是最终落在 i 号点上的球,没有则为 0,问最后的合法的 ans 的个数对 10^9+7 取模的结果。
数据范围:

f_{i,j} 为在 i 号点上有 j 个球落入了这里的合法方案数(这里的“落入”不含投放的球),那么我们枚举 l 代表在投放在 i 点的球中有 l 个按照原来的方向往下落,这个转移方程需要含以下几部分:

那么我们将上面的所有数相乘累加即可。

代码