我们如何解决图上子集联通概率问题?

首先我们把问题转换为 \(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\)点的意义,就是使得其余的所有点的状态只有两种,这样我们枚举子集转移就会做到不重不漏。

posted @ 2025-07-30 21:06  NeeDna  阅读(13)  评论(0)    收藏  举报