传送门
显然把链提出来,两端点子树内每个点的贡献为
siz1
最后乘一个
n!
考虑链上的,如果枚举最后一个点不好算
考虑枚举一条边作为没经过的
且在
a,b之间连一条边
那么每个点恰好被计算两次
记
siz为每个点非链子树
siz的
对于
(i,i+1)之间的边
贡献就是
∏j=i∣sizi−sizj∣1
考虑把绝对值拆开显然没多大区别
设链长为
m,那么乘上
(−1)m−i
那么就是计算一个
∑i∏j=i(sizj−sizi)1
考虑写作
fi(x)=∏jx−sizjx−sizi
那么就是所有
∑ifi(sizi)
这个直接没法做,用洛必达法则求个导就可以了
然后再写个多点求值即可
code