給定一張 \(n\) 個點,\(m\) 條邊的圖 \(g\),計算他有多少個子圖滿足其強連通。答案對 \(10^9+7\) 取模。
\(n\le 15,m\le \frac\)
\(\rm sol:\)
感覺是開啟了 dag 計數/圖計數 的先河?
先考慮乙個暴力做法,注意到子圖 \(g'\) 是強連通圖當且僅當縮點後有且僅有乙個點。
反之其為 dag,那麼考慮計算圖的總數減去縮點後是 dag 的圖的數量。
那麼先考慮 dag 計數。
設 \(f_s\) 表示點集 \(s\) 的 dag 生成子圖的數量,那麼考慮:
\[\sum_ f_t\times 2^}
\]不難發現其算重了,\(f_t\times 2^}\) 的真實含義為度數為 \(0\) 的點集至少為 \(t\) 的方案數。
於是可以使用容斥原理改寫 dag 計數:
\[f_s=\sum_ (-1)^f_t\times 2^}
\]接下來考慮強聯通圖計數,設 \(g_s\) 表示圖 \(s\) 為強連通圖的方案數,那麼縮點為 dag 即存在度為 \(0\) 點,那麼不妨設 \(h_\) 表示點集 \(t\) 的點構成 \(k\) 張強聯通子圖的方案數,且這些子圖互不相交。
不難得到:
\[g_s=2^}-\sum_\sum_k (-1)^h_\times 2^}\times 2^}
\]不難發現 \(h_\) 其實與 \(k\) 的具體值無關,只關乎 \(t\) 模 \(2\) 的值,於是設 \(g_\) 表示將圖 \(t\) 拆成奇數個強連通塊的方案數,\(h_\) 表示將圖 \(t\) 拆成偶數個強連通塊的方案數,於是有:
\[g_s=2^-\sum_(g_t-h_t)\times 2^}\times 2^}
\]\[g_s=\sum_ h_\times g_
\]\[h_s=\sum_ g_\times g_
\]問題瓶頸在於求解 \(2^}\),可以考慮列舉 \(s\),然後列舉 \(t\) 同時沿途計算 \(cnt_\)
考慮預處理 \(cnt_\) 即某個點到集合 \(s\) 的邊數,那麼就可以列舉 \(s\),然後在列舉 \(t\) 的時候順便將 \(cnt_\) 給算出來了。複雜度是 \(\mathcal o(n^22^n+3^n)\)
如果保證圖為無向圖,那麼可以借助 fwt 和 \(cnt_=cnt_-cnt_-cnt_\) 來進行子集 dp,複雜度可以做到 \(\mathcal o(n^22^n)\)
具體:設 \(g_s'=\sum_(g_t-h_t)\times 2^}\times 2^}\)
\[\frac}=\sum_ \frac}\times \frac}}
\]於是就可以直接做了。
清華集訓2014 BZOJ3812 主旋律
description 響應主旋律的號召,大家決定讓這個班級充滿愛,現在班級裡面有 n 個男生。如果 a 愛著 b,那麼就相當於 a 和 b 之間有一條 a b 的有向邊。如果這 n 個點的圖是強聯通的,那麼就認為這個班級是充滿愛的。不幸的是,有一些不好的事情發生了,現在每一條邊都可能被摧毀。我作為...
UOJ37 清華集訓2014 主旋律
link 然後列舉縮點之後的dag的情況,考慮計算可行的邊集方案數,再遞迴乘上所有scc的匯出子圖的答案。計算可行的邊集方案數可以考慮dp,設 f s 表示點集 s 的匯出子圖中使得子圖形成乙個dag的邊集方案數,那麼可以得到轉移 f s sum limits 1 f 2 其中 cnt 表示的是起點...
UOJ37 清華集訓2014 主旋律
設 f s 為點集 s 中強連通生成子圖的方案數,cnt s 為點集 s 構成的誘導子圖中邊的個數。考慮用 2 減去不合法方案數來計算 f s 不合法情況即為縮點後為 dag 設 h s 為點集 s 縮點後構成點數 1 的 dag 的方案數。考慮列舉乙個點集 t 其由若干個出度為 0 的強連通分量構...