题目描述
给定一张强联通图,求有多少种边的存在情况满足图依然强联通。
n ≤ 15 n\leq15 n≤15
Sol
首先正难则反,考虑用总数减去不强联通的。
考虑一张不强联通的图,缩点后一定是一个 DAG,好像可以对 DAG 进行计数。
诈一看这个做不了,因为缩点后计数是不可能在dp过程中实现的。
但我们按照 DAG 计数的思路的话其实并不需要真的知道 DAG 缩点后的形态。
我们类似 DAG 计数的话那么枚举这些缩完点后的点至少有多少个入度为 0 的点,然后容斥计算。
过程中我们用到的只是有 奇数/偶数个 入度为0的点的方案数以及他们和外部连边的总方案数。
所以我们只需要设 g [ s ] / h [ s ] g[s]/h[s] g[s]/h[s] 分别表示 集合 s s s的导出子图 内有 奇数/偶数 个入度为0的强联通分量的方案数。设 f [ s ] f[s] f[s] 表示 s s s 集合导出子图强联通的方案数, c n t ( S , T ) cnt(S,T) cnt(S,T) 表示 S S S 到 T T T 内的边数。
f f f的转移和 DAG 计数类似。g,h的转移都很简单:
f [ S ] = 2 c n t ( S , S ) − ∑ T ⊆ S , T ≠ ∅ ( g [ T ] − h [ T ] ) ∗ 2 c n t ( S − T , S − T ) + c n t ( T , S − T ) f[S]=2^{cnt(S,S)}-\sum_{T\subseteq S , T \neq \emptyset}(g[T]-h[T])*2^{cnt(S-T,S-T)+cnt(T,S-T)} f[S]=2cnt(S,S)−T⊆S,T̸=∅∑(