比赛链接
这道题就随便搞搞 然后显然有一个这样的柿子:∑i=1nval∑j=0m∑k=0mCmjCmksizeij+k(n−sizei)2m−j−kf(k,j)
其中f(x,y)=min(x,m−y)+min(y,m−x),val为这个点到父亲节点的边权。
然后我们又发现,当x+y≤m,f(x)=x+y。当x+y>m,f(x)=2m−x−y。只有这两种情况。所以f(x+y)=min(x+y,2m−x−y)。
然后就是一个LSJ爷爷在课上讲了的组合恒等式(那天起晚了所以没听到/kk):∑i=0k(ni)(mk−i)=(n+mk)
其实就是合并组合数 :∑x=0n∑y=0mCnxCmy=∑p=0n+mCn+mp。前面的这玩意就相当于前一半选多少个方案数乘上后一半选多少个的方案数,显然就等于把前后两半合在一起选的方案数。
然后你会发现,在用了这两个操作之后 就不需要分别枚举x和y了,枚举个x+y就好了。
柿子就变成了:
i=1∑nvalj=0∑2mC2mjsizeij(n−sizei)2m−jf(j)
然后这玩意复杂度就是O(nm)的啦~