counting
CF995F
首先只要求了偏序关系,所以实际上对于一个最终状态可以进行一手离散化。换句话说我们可以宣称值域是 \([1,n]\) 这个量级。
然后发现 \(n\) 很小,可以考虑一下 dp。
设 \(f_i\) 表示用 \([1,i]\) 的数填树的方案数(不一定每个数都要用),\(g_i\) 表示恰好用 \([1,i]\) 的每个数都用了至少一次填树的方案数。
然后不难发现答案就是 \(\sum\binom{d}{i}g_i\)。显然 \(g\) 可以通过 \(f\) 二项式反演得到,于是只需考虑怎么算 \(f\)。
于是考虑怎么 dp。设 \(dp_{u,i}\) 表示 \(u\) 子树内,只用 \([1,i]\) 的数填的方案数,\(sum_{u,i}\) 是 \(dp_{u,i}\) 的前缀和。然后转移就是 \(dp_{u,i}\) 从所有儿子的 \(sum_{v,i}\) 转过来。
有 \(\displaystyle f_n=\sum_{i=0}^{n}\binom{n}{i}g_i,g_n=\sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}f_i\)。
比较牛的一点可能是第一部类离散化,使得我们可以 dp,否则直接 dp 复杂度显然炸裂。

浙公网安备 33010602011771号