我们如何解决图上子集联通概率问题?
首先我们把问题转换为 \(1-子集不联通\) 的概率。
现在我们要设 \(f_i,g_i\) 分别表示子集 \(i\) 的联通与不联通概率。
我们从 \(i\) 中固定一个点 \(p\) ,设 \(r\) 为 \(C_pi\) (\(C\) 是补集)的一个子集,那么我们有如下转移式子:
\[f_i=1-\sum_{r\in C_pi} f_{C_ri}\times E(r,C_ri)
\]
其中 \(E\) 是两个子集不联通的概率,我们可以枚举边 \(n^2\) 求出。
也可以 meet in middle 预处理 \(E\)。
对于 清华集训 2012] 串珠子 - 洛谷 这道题,我们有这个东西,也很神奇。
from MikukuOvO
考虑\(f[i]\)表示状态为\(i\)的连边方案数,\(g[i]\)表示状态为\(i\)的能使得联通的连边方案数,\(t[i]\)表示状态为\(i\)使得不连通的方案数。
首先\(f[i]\)是比较好求的,就是\(f[i]=\prod_{(u<v)\in k}(c[u][v]+1)\)。
关于求\(t[i]\),我们首先固定\(i\)中的一个点\(p\),那么剩余的点要么与\(p\)联通,要么与\(p\)不连通。
假设和\(p\)联通的点集为\(S\),不连通的点集为\(T\),那么对于\(t[i]\)的贡献就是\(g[S]\times f[T]\)。
这样我们枚举子集转移即可,\(g[i]=f[i]-t[i]\)。
这里我解答一个问题,为什么\(p\)可以任意?
考虑实际上我们固定\(p\)点的意义,就是使得其余的所有点的状态只有两种,这样我们枚举子集转移就会做到不重不漏。

浙公网安备 33010602011771号