2022 HDU多校第7场1010题 HDU7218 题解

f [ i ] f[i] f[i] i i i 个点成为连通块的概率,那么考虑答案枚举每个连通块对期望的贡献,一个大小为 k k k 的连通块对答案的贡献是 ( n k ) f [ k ] ( 1 − p ) ( n − k ) k \binom{n}{k}f[k](1-p)^{(n-k)k} (kn)f[k](1p)(nk)k

随便 dp 一下(用1减去不连通的概率,考虑1号点所在的连通块大小),有:
f [ i ] = 1 − ∑ j + k = i , j ≠ 0 , k ≠ 0 f [ j ] ( i − 1 j − 1 ) ( 1 − p ) j k f[i]=1-\sum_{j+k=i,j\neq0,k\neq0}f[j]\binom{i-1}{j-1}(1-p)^{jk} f[i]=1j+k=i,j=0,k=0f[j](j1i1)(1p)jk
然后我们会发现 j k jk jk ( 1 − p ) (1-p) (1p) 的头上,正是这题的难点。把 j k jk jk 变个型 j k = ( i 2 − j 2 − k 2 ) / 2 jk=(i^2-j^2-k^2)/2 jk=(i2j2k2)/2 ,但是这样如果拆开卷会导致除以二在指数上,所以把 j k jk jk 变成 ( i 2 − j 2 − k 2 − i + j + k ) / 2 (i^2-j^2-k^2-i+j+k)/2 (i2j2k2i+j+k)/2。然后把原式卷一下:
f [ i ] = 1 − ∑ j + k = i , j ≠ 0 , k ≠ 0 f [ j ] ( i − 1 j − 1 ) ( 1 − p ) j k = 1 − ( 1 − p ) ( i − i 2 ) / 2 ( i − 1 ) ! ∑ j + k = i , j ≠ 0 , k ≠ 0 ( f [ j ] ( 1 − p ) ( j − j 2 ) / 2 ( j − 1 ) ! ) ( ( 1 − p ) ( k − k 2 ) / 2 k ! ) \begin{aligned} f[i]&=1-\sum_{j+k=i,j\neq0,k\neq0}f[j]\binom{i-1}{j-1}(1-p)^{jk}\\ &=1-(1-p)^{(i-i^2)/2}(i-1)!\sum_{j+k=i,j\neq0,k\neq0}\left(\frac{f[j](1-p)^{(j-j^2)/2}}{(j-1)!}\right)\left(\frac{(1-p)^{(k-k^2)/2}}{k!}\right)\\ \end{aligned} f[i]=1j+k=i,j=0,k=0f[j](j1i1)(1p)jk=1(1p)(ii2)/2(i1)!j+k=i,j=0,k=0((j1)!f[j](1p)(jj2)/2)(k!(1p)(kk2)/2)
到这里就可以用CDQNTT O ( n log ⁡ 2 n ) O(n\log^2n) O(nlog2n) 解出 f f f。但是这样复杂度仍然过不了。
( 1 − p ) ( i 2 − i ) / 2 / ( i − 1 ) !   f [ i ] = ( 1 − p ) ( i 2 − i ) / 2 / ( i − 1 ) ! − ∑ j + k = i , j ≠ 0 , k ≠ 0 ( f [ j ] ( 1 − p ) ( j − j 2 ) / 2 ( j − 1 ) ! ) ( ( 1 − p ) ( k − k 2 ) / 2 k ! ) \begin{aligned} (1-p)^{(i^2-i)/2}/(i-1)!\ f[i]&=(1-p)^{(i^2-i)/2}/(i-1)!-\sum_{j+k=i,j\neq0,k\neq0}\left(\frac{f[j](1-p)^{(j-j^2)/2}}{(j-1)!}\right)\left(\frac{(1-p)^{(k-k^2)/2}}{k!}\right)\\ \end{aligned} (1p)(i2i)/2/(i1)! f[i]=(1p)(i2i)/2/(i1)!j+k=i,j=0,k=0((j1)!f[j](1p)(jj2)/2)(k!(1p)(kk2)/2)
( 1 − p ) ( i 2 − i ) / 2 ( i − 1 ) ! f [ i ] = F [ i ] \dfrac{(1-p)^{(i^2-i)/2}}{(i-1)!}f[i]=F[i] (i1)!(1p)(i2i)/2f[i]=F[i] ( 1 − p ) ( k − k 2 ) / 2 k ! = G [ k ] \dfrac{(1-p)^{(k-k^2)/2}}{k!}=G[k] k!(1p)(kk2)/2=G[k] ( 1 − p ) ( i 2 − i ) / 2 ( i − 1 ) ! = M [ i ] \dfrac{(1-p)^{(i^2-i)/2}}{(i-1)!}=M[i] (i1)!(1p)(i2i)/2=M[i]

特殊地, F [ 0 ] = G [ 0 ] = M [ 0 ] = 0 F[0]=G[0]=M[0]=0 F[0]=G[0]=M[0]=0

于是有 F = M − F ∘ G ⇒ F = M G + 1 F=M-F\circ G\Rightarrow F=\dfrac{M}{G+1} F=MFGF=G+1M

做一次多项式逆就可算出 F F F

算出 F F F 后,计算答案,即:
∑ k = 1 n ( n k ) f [ k ] ( 1 − p ) ( n − k ) k = n ! ( 1 − p ) ( n 2 − n ) / 2 ∑ k = 1 n ( F [ i ] / i ) ∗ ( q ( j − j 2 ) / 2 / j ) = G − 1 [ n ] ∗ [ x n ] ( F ( x ) x ∘ ( G ( x ) + 1 ) ) \begin{aligned} &\sum_{k=1}^n\binom{n}{k}f[k](1-p)^{(n-k)k}\\ =&n!(1-p)^{(n^2-n)/2}\sum_{k=1}^n (F[i]/i) *(q^{(j-j^2)/2}/j)\\ =&G^{-1}[n]*[x^n]\left(\dfrac{F(x)}{x}\circ (G(x)+1)\right) \end{aligned} ==k=1n(kn)f[k](1p)(nk)kn!(1p)(n2n)/2k=1n(F[i]/i)(q(jj2)/2/j)G1[n][xn](xF(x)(G(x)+1))

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值