模考T3题解
xtr 哥哥还是太厉害了!好妙的题。
这个题统计的是 \(k\) 次方的期望。一个套路是在做 DP 的时候记录 \(0\) 到 \(k\) 次方,然后使用二项式定理合并。
60pts
我们考虑算出答案和再除以 \(2^n\)。(我在这一步就寄了)
考虑在树上 DP,\(f_{u,k}\) 表示以节点 \(u\) 为根的联通块的边数的 \(k\) 次方的总和。
我们考虑初始把联通块设为 \(u\) 一个点,一个一个添加子树。
对于 \(u\) 为根的联通块,若其有 \(e_u\) 条边,合并上一个有 \(e_v\) 条边的 \(v\) 为根的联通块,则新联通块的边数为 \(a+b+1\)。
发现 \((a+b+1)^k=\sum_{i=0}^na^i(b+1)^{k-i}\),这启发我们记录 \(g_{u,k}\) 表示以节点 \(u\) 为根的联通块的边数加一 \(k\) 次方的总和。
于是
设新 \(f\) 是 \(h\)。
我们发现对于新联通块来讲,她可能只包含 \(u\) 原本的联通块或只是 \(v\) 的联通块连上一条 \((u,v)\)。于是我们也要加上这种情况。
考虑边界条件,在只有一个点的时候边数显然为 \(0\),但 \(f_{u,0}\) 为 \(0^0\)。我们发现因为是要套二项式定理,\((x+0)^k=x^k0^0\) 所以此处应取 \(0^0\) 为 \(1\)。
这是一个 \(\mathcal O(nk^2)\)。
100pts
考虑优化她,看到 \(k\) 次方想到斯特林数(?)
把 \(f\) 和 \(g\) 的定义改成 \(k\) 次下降幂的期望。
我们发现 \(f\) 和 \(g\) 在次数大于 \(sz\) 的时候为 \(0\),因为边数最多为 \(sz-1\),而下降幂次大于底数时为 \(0\),于是我们在转移 \(f\) 的时候可以变成均摊 \(\mathcal O (k)\)。
在转移 \(g\) 的时候发现 \(g_{u,k}=\sum_{i=0}^kf_{u,i}1^{\underline k-i}\),在 \(k-i>1\) 时为 \(0\)。于是转移只要转移两项就行了,变成 \(\mathcal O(k)\)。
最后把 \(f_{u,k}\) 用 \(x^n=\sum_{i=0}^nS_n^ix^{\underline i}\) 还原即可。
\(\mathcal O(nk)\)。

浙公网安备 33010602011771号