连通性容斥

一种比较牛的东西,典型标志为 \(n \le 18\),计数满足特殊性质而且连通的状物。

[ARC105F]

有一张 \(n\) 个点 \(m\) 条边的简单无向图,问选出一个边集,使得 \(n\) 个点与这些边构成的图连通,并且图是二分图的方案数。

\(1\leq n\leq 17,n-1\leq m\leq \frac{n(n-1)}{2}\)

通用套路是先不理连通算方案数,设 \(h_S\) 表示有多少条边两端点都在集合 \(S\) 中。

一个图是二分图的充要条件是恰好能将图黑白染色,那我们枚举集合中为黑色的子集,设 \(g_S\) 为图是二分图的方案数。

那么有 $g_S= \displaystyle\sum_{t \subseteq S} 2^{h_S-h_T-h_{S \bigoplus T}} $ 即黑白两色内部不能染色。

接下来剪掉不连通的,这个就是连通性容斥套路,设 \(f_S\) 为最终集合的答案。

我们钦定一个集合 \(S\) 中的最小点为连通块的根,(任意的点都可以,只是最小的点用 \(lowbit\) 方便计算)。

我们枚举当前这个最小点当前所在连通块集合 \(T\),那么它对当 \(S\) 的贡献要减去 \(f_T \times g_{T \bigoplus S}\) 即当前连通块答案乘上不在当前块中任意算边的方案。

所以 \(f_S=g_S -\displaystyle\sum_{T \subset S \or lowbit(T)=lowbit(S)} f_T \times g_{T\bigoplus S}\)

复杂度 \(O(3^n)\)

[ABC321G]

\(n\) 个点,给定两个长度为 \(m\) 的序列 \(a_i,b_i\)

对于一个 \(1\sim m\) 的排列 \(P\),将 \(a_i\)\(b_{P_i}\) 连边后,其权值定义为这 \(n\) 个点 \(m\) 条边所构成的图的连通块个数。

对于所有 \(m!\) 个排列 \(P\),求它们权值的期望值。

\(1 \le n \le 17,1\ \le m \le 10^5\)

典中典之先期望转计数。

还是先啥都不管设 \(ha_S,hb_S\) 分别表示 \(S\) 的子集中有出现了多少 \(a_i,b_i\),设 \(h_S\) 表示只在集合 \(S\) 互相连边的方案数。

显然有 \(h_S=[ha_S=hb_S] ha_S !\),然后使用连通性容斥设 \(g_S\) 表示使得集合 \(S\) 连通的方案数。

和上题类似,\(g_S=h_S-\displaystyle\sum_{T \subset S \or lowbit(T)=lobit(S)}g_T \times h_{T \bigoplus S}\)

接下来设 \(f_S\) 表示集合 \(S\) 所有方案连通块数量之和,仍然需要枚举有集合最小值的子集 \(T\) 作为最后一块加入集合(不钦定要算重)

那么也就有 \(f_S= \displaystyle\sum_{T \subset S \or lowbit(T)=lowbit(S)} g_j \times f_{T \bigoplus S}+g_j \times h_{T\bigoplus S}\)

前后两部分分别代表新加入的连通块对方案数和连通块数量的贡献。

复杂度 \(O(3^n)\)

这种题目需要注意的是枚举子集是否空集以及全集,需要画图慢慢理解一下。

Upd:这种题通过一些神妙的数学手段也许能变得更优,等实力变强了再来补。

posted @ 2023-12-04 21:27  Hanghang007  阅读(198)  评论(1)    收藏  举报