题目大意
有一棵 $n$ 个结点的树,现有 $m$ 个人位于不同的结点,那么要让他们在同一结点相遇的话会有一个最小总路程。而“$m$个人位于不同结点”共有 $\binom nm$ 种情况,求这 $\binom{n}{m}$ 种情况的最小总路程之和,模 $10^9+7$。
$m \le n \le 10^6$
多测,$T \le 1000$,$\sum n \le 2\times 10^6$
2s
题解
考虑每条边的贡献,一条边有贡献当且仅当这条边两侧都有人,且贡献等于两侧人数的较小值。形式化地说,假设一条边连接了 $x$ 子树和 $y$ 子树,那么这条边的贡献为:
把 $\min$ 拆掉变成
这式子共 3 项,最后一项对于每条边单独算一下就行了,所以要算前两项,以第一项为例做一个变形把乘 $i$ 去掉:
注意到 $size_x+size_y=n$,记 $h_s=\sum_{i=1}^{\lfloor \frac{m-1}{2} \rfloor} \binom{s-1}{i-1} \binom{n-s}{m-i}$,结果发现这玩意是能递推的!
有两种方法能够得到递推结果。
一种是考虑 $h_s$ 的组合意义:把 $m-1$ 个球放到 $n-1$ 个盒子里,每个盒子最多放 $1$ 个球,且要求前 $s-1$ 个盒子最多只能有 $\lfloor \frac{m-1}{2} \rfloor-1$ 个球,问方案数。
$m-1$ 个球放入 $n-1$ 个盒子共 $\binom{n-1}{m-1}$ 种方案,这也是 $h_1$ 的值。随着 $s$ 的增大,只会有越来越多的方案变得非法。从 $h_{s-1}$ 到 $h_s$ 变得非法的方案,即为前 $s-2$ 个盒子已经放够了 $\lfloor \frac{m-1}{2} \rfloor -1$ 个球,而第 $s-1$ 个盒子又放了一个球,其余球放在后面的盒子里,方案数为 $\binom{s-2}{\lfloor \frac{m-1}{2} \rfloor -1}\binom{n-s}{m-1-\lfloor \frac{m-1}{2} \rfloor}$。
另一种方法是硬推:
把 $i=1$ 单独拉出来,其余的把 $\binom{s}{i-1}$ 拆成 $\binom{s-1}{i-1}+\binom{s-1}{i-2}$、把 $\binom{n-s}{m-i}$ 拆成 $\binom{n-s-1}{m-i}+\binom{n-s-1}{m-i-1}$,然后基本上所有的项都被消去了,能得到同样的结果。式子太长就不写了。
于是,$O(n)$ 递推出 $h$,然后每条边单独算贡献,就得到答案了。
代码
1 |
|