一道计数题 TopCoder14333 SRM697 ConnectedStates

代码还没写,不确定正确性

貌似是假了

题目是这样的:

Link

给出序列 \(w_1,w_2,\cdots,w_n\),考虑一张 \(n\) 个点的图,\(i,j\) 之间有 \(w_i\times w_j\) 条连边。对于这张图的一棵生成树,其权值为 \(\prod d_i\)。你需要计算所有生成树的权值和 \(\bmod 10^9+7\) 的值。

原题数据范围:\(1\le n\le 2000\)。但可以做到 \(O(n\log n)\)

首先我们考虑枚举每个点的度数,设为 \(d_1,d_2,\cdots,d_n\),那么贡献为 \(\prod d_iw_i^{d_i}\),由 \(\text{Prufer}\) 序列的经典结论可知方案数为 \(\frac{(n-2)!}{\prod (d_i-1)!}\)

现在要求的就是

\[\sum_{d_1+d_2+\cdots+d_n=2n-2}\prod d_iw_i^{d_i}\dfrac{(n-2)!}{\prod(d_i-1)!} \]

我们发现后面那一堆有点像多元二项式定理

但是这里 \(d_i\) 的范围是 \(\ge 1\),我们做代换 \(t_i=d_i-1\),上式即

\[\sum_{t_1+\cdots+t_n=n-2}\prod_{i=1}^n(t_i+1)w_i^{t_i+1}\dfrac{(n-2)!}{\prod_{i=1}^n t_i!} \]

我们发现有一个 \((n-2)!\prod w_i\) 是不变的,那么把这个东西提到前面去

\[\sum_{t_1+\cdots+t_n=n-2}\dfrac{1}{\prod_{i=1}^n t_i!}\prod_{i=1}^n w_i^{t_i}\prod_{i=1}^n(t_i+1) \]

我们发现如果没有最后那个 \(\prod (t_i+1)\) 那么前面那个就是 \((w_1+\cdots+w_n)^{n-2}\)

那么后面那一项怎么处理呢

我们考虑把这东西展开,得到

\[\sum_{t_1+\cdots+t_n=n-2}\dfrac{1}{\prod_{i=1}^n t_i!}\prod _{i=1}^nw_i^{t_i}\left(\sum_{S\subseteq U}\prod_{i\in S}t_i\right) \]

其中 \(U=\{1,2,\cdots,n\}\) 为全集。

交换求和顺序

\[\sum_{S\subseteq U}\sum_{t_1+\cdots+t_n=n-2}\dfrac{1}{\prod _{i=1}^nt_i!}\prod_{i=1}^n w_i^{t_i}\prod_{i\in S}t_i \]

接下来是非常神仙的一步,我们考虑做代换

\[r_i=\begin{cases}t_i-1&,i\in S\\t_i&,i\not\in S\end{cases} \]

那么上式化为

\[\sum_{S\subseteq U}\sum_{t_1+\cdots+t_n=n-2}\dfrac{1}{\prod_{i\in S}(r_i+1)!\prod_{i\not\in S}r_i!}\prod_{i\in S}w_i^{r_i+1}\prod_{i\not\in S}w_i^{r_i}\prod_{i\in S}(r_i+1) \]

我们发现 \(\prod_{i\in S}(r_i+1)\) 和分母上的 \(\prod_{i\in S}(r_i+1)!\) 消掉了

再把 \(\prod_{i\in S}w_i^{r_i+1}\) 提个 \(\prod_{i\in S}w_i\) 出来,我们得到

\[\sum_{S\subseteq U}\sum_{r_1+\cdots+r_n=n-|S|}\dfrac{1}{\prod_{i=1}^nr_i!}\prod_{i=1}^nw_i^{r_i}\prod_{i\in S}w_i \]

我们发现可以把 \(\prod_{i\in S}w_i\) 提出来,然后终于可以用一步多元二项式定理了=_=

\[\sum_{S\subseteq U}\left(\sum_{i=1}^nw_i\right)^{n-|S|}\prod_{i\in S}w_i \]

后面就是一些比较套路的东西了:枚举 \(|S|\),记 \(W=\sum_{i=1}^nw_i\) 那么上式即

\[\sum_{d=0}^nW^dC_{n}^d\prod_{i=1}^nw_i^{C_{n-1}^{d-1}} \]

其中 \(\prod_{i=1}^nw_i^{C_{n-1}^{d-1}}\) 的含义是,考虑每个 \(w_i\) 的贡献,那么满足 \(|S|=d\)\(i\in S\) 的集合共有 \(C_{n-1}^{d-1}\),因此贡献就是 \(w_i^{C_{n-1}^{d-1}}\)

可以发现后面那个就是 \(\left(\prod_{i=1}^nw_i\right)^{C_{n-1}^{d-1}}\),因此我们不仅要处理组合数对 \(10^{9}+7\) 取模后的值,还需要依据欧拉定理处理出来组合数对 \(10^9+6\) 取模的值来计算快速幂

看上去这个东西不是个质数,但实际上我们有 \(10^{9}+6=2\times (5\times 10^{8}+3)\),而 \(5\times 10^8+3\) 是一个质数。因此我们算出来组合数对 \(2\)\(5\times 10^8+3\) 取模的值然后用中国剩余定理合并即可。

清算一下复杂度,可以发现至少能做到 \(O(n\log n)\)

posted @ 2022-08-06 09:30  云浅知处  阅读(47)  评论(0编辑  收藏  举报