P9357 题解

· · 题解

这里给一种不需要 dirty work 递推的方法。

求和可以改成求期望再乘方案数。

首先第一步是一样的,把连通块的贡献拆成操作的点对每个连通块里的点的贡献。记 p(u,v,w) 表示操作 u 之前 u 的权值是 w 且这一步操作时 v 在那个连通块里的概率。那么答案就是

\sum\limits_{u=1}^n \sum\limits_{v=1}^n \sum\limits_{w=0}^{m-1} p(u,v,w)

容易发现,p(u,v,w) 只和 uv 的距离有关,所以设 duv 的路径上的点数(本题中我们把这个定义为两点间距离),答案可以改写成

\sum\limits_{d=1}^n c_d \sum\limits_{w=0}^{m-1} p(d,w)

其中 c_d 表示路径上点数为 d 的有向路径条数,p(d,w) 表示一对距离为 d 的点 u,vp(u,v,w)

现在来求 p(d,w)

考虑这样计算这个概率:先决定每一步操作是否在路径上,然后决定路径上的操作的位置。有贡献当且仅当路径上至少有 dw+1 次操作,并且在路径上的前 dw 次操作均等地分布在路径的 d 个点上,并且第 dw+1 次操作操作的是点 u

可以发现,这三个条件中,只要满足了第一个条件,无论有多少次操作在路径上,满足后面两个条件的概率都是一样的。这个概率等于

\frac{(dw)!}{(w!)^dd^{dw+1}}

即前 dw 次平均分配的方案数除以前 dw 次的总方案数再乘以第 dw+1 次操作位于 u 的概率。

对于满足第一个条件的概率,可以考虑枚举有多少个操作在路径上。由于一次操作在路径上的概率是 \frac{d}{n},所以这个概率就等于

\sum\limits_{i=dw+1}^m{m\choose i}\frac{d^i(n-d)^{m-i}}{n^m}

注意 w 的取值范围是 \left[0,\left\lfloor\frac{m-1}{d}\right\rfloor\right],否则就会有 dw+1>m

结合上述几个部分,答案就等于

\sum\limits_{d=1}^n c_d \sum\limits_{w=0}^{\left\lfloor\frac{m-1}{d}\right\rfloor}\frac{(dw)!}{(w!)^dd^{dw+1}}\sum\limits_{i=dw+1}^m{m\choose i}\frac{d^i(n-d)^{m-i}}{n^m}

乘上最初为了算期望除掉的方案数 n^m,就是

\sum\limits_{d=1}^n c_d \sum\limits_{w=0}^{\left\lfloor\frac{m-1}{d}\right\rfloor}\frac{(dw)!}{(w!)^dd^{dw+1}}\sum\limits_{i=dw+1}^m{m\choose i}d^i(n-d)^{m-i}

然后就可以直接算了。

组合数和阶乘、阶乘逆元可以直接 O(m) 预处理。

这样最后一个和号就可以由其右边的东西对 $i$ 做一个后缀和得到。 前两个和号的枚举是 $O(m\log n)$ 的,而计算中间那个分式的分母的逆元的时间复杂度是 $O(\log M)$ 的,其中 $M$ 为模数。 所以总复杂度是 $O(n^2+m(n+\log n\log M))$。在本题的数据范围下和标算相当。