以为是个什么 DS 题,原来还有这种操作?(似乎确实可以 DS 做)
以下 subtree(p) 表示以 p 为根的子树中所有结点的集合,son(p) 表示 p 的所有儿子的集合,fa(p) 表示 p 的父亲。
根据第二类斯特林数的某些性质,有 nk=k∑i=0i!{ki}(ni)
故 S(i)=k∑e=0e!{ke}n∑j=1(dist(i,j)e)
主要问题在于如何算 n∑j=1(dist(i,j)e)。
考虑设 fu,e=∑v∈subtree(u)(dist(u,v)e)gu,e=∑v∉subtree(u)(dist(u,v)e)
看起来 f 更好做: fu,e=(0e)+∑v∈son(u)∑w∈subtree(v)(dist(v,w)+1e)=[e=0]+∑v∈son(u)∑w∈subtree(v)[(dist(v,w)e)+(dist(v,w)e−1)]=[e=0]+∑v∈son(u)(fv,e+fv,e−1)
于是是 g: gu,e=∑v∉subtree(fa(u))(dist(fa(u),v)+1e)+∑v∈subtree(fa(u))(dist(fa(u),v)+1e)−∑v∈subtree(u)(dist(u,v)+2e)=(gfa(u),e+gfa(u),e−1)+(ffa(u),e+ffa(u),e−1)−(fu,e+2fu,e−1+fu,e−2)
然后就做完了鸭。
代码:
1 |
|