看到这种东西,首先考虑 min-max 容斥(虽然好像也有不用 min-max 容斥的做法)。
设 max(S) 表示走完 S 内所有点的步数(即走到 S 内每个点步数的最大值),min(S) 表示走到 S 中任意点的步数(即走到 S 内每个点步数的最小值)。
那么有 E(max(S))=∑T⊆S(−1)|T|+1E(min(T)) 这个可以在处理完所有 E(min(S)) 后在 O(n2n) 复杂度内使用 FWT 计算。
于是考虑 DP,设 f(u) 表示从结点 u 出发走到 S 中任意点的期望步数。
那么有 f(u)=1degu(f(fau)+∑v∈sonuf(v))+1
看起来转移有环,但是实际上在树上可以用待定系数解决这样一个 DP。
设 f(u)=kuf(fau)+bu
那么有 f(u)=1degu(f(fau)+∑v∈sonuf(v))+1=1degu(f(fau)+∑v∈sonu(kvf(u)+bv))+1deguf(u)=f(fau)+∑v∈sonu(kvf(u)+bv)+degu=f(fau)+f(u)∑v∈sonukv+∑v∈sonubv+degu(degu−∑v∈sonukv)f(u)=f(fau)+∑v∈sonubv+deguf(u)=1degu−∑v∈sonukv⋅f(fau)+degu+∑v∈sonubvdegu−∑v∈sonukv
于是这样枚举所有 S DP 即可,复杂度 O(n2nlogp),其中 p=998244353。
代码:
1 |
|