貌似可以点分治合并果子+NTT,但是不够优雅。
首先考虑拆 \(dist\) 到 \(dep\),但拆之后 \(k\) 次方并不好处理。
于是我们先从 \(k\) 次方下手,使用第二类斯特林数来将通常幂转为下降幂。
现在我们尝试求 \(\sum_{i=1}^n\sum_{j=1}^n{dist(i,j)\choose t}\)。根据经验不难想到春游拆组合数,那么我们需要一个 DP 的过程。我们尝试换根 DP,于是现在先只考虑对一个根结点 \(r\) 求 \(\sum_{u=1}^n{dist(r,u)\choose t}\)。
不妨设 \(f_{u,t}\) 表示 \(\sum_{v\in subtree_u} {dist(u,v) \choose t}\)。那么有:
根据定义,初值是 \(\forall u, f_{u,0}=siz_u\),其中 \(siz_u\) 为 \(u\) 的子树中的结点个数。
对于叶子结点,\(f_{u,t}=[t=0]\)。
那对于 \(t>0\),方程就可以简化为 \(f_{u,t}=\sum_{v\in son_u} f_{v,t}+f_{v,t-1}\)。
二维状态的换根是一样的。一种处理方式是在第一遍树形 DP 和第二遍树形 DP(换根)的内层枚举 \(t\),至于 \(t=0\),每个点作为根的答案都是 \(n\)。
最后 \(O(k^2)\) 递推求第二类斯特林数,带入 DP 的结果计算答案即可。
时间复杂度为 \(O(nk+k^2)\)。
这道题的巧妙之处主要在于组合数中带有路径长度,而走一条边路径长度增加/减少 \(1\),于是可以使用春游来拆组合数,并把下指标也记进 DP 状态。
2025.3.16