1. 程式人生 > 其它 >ABC220H - Security Camera

ABC220H - Security Camera

基礎 FWT 練習題

考慮折半,將點按照標號是否 \(\le \frac{n}{2}\) 分成兩個集合 \(S_1, S_2\)

首先原問題的形式有點奇怪,我們不妨統計沒有被覆蓋覆蓋的邊為偶數條的情況。

這樣一來問題轉化為白點 匯出子圖 的邊數為偶數的情況,這與原問題等價。

考慮 \(S_1, S_2\) 中怎樣的兩個集合合併是合法的,形式化地,有:

\(f_S(S \subseteq S_1)\)\(S\) 這個集合匯出子圖邊數的奇偶性,類似地定義 \(g_T(T \subseteq S_2)\),同時令 \(E_{S, T}(S \subseteq S_1, T \subseteq S_2)\) 為左部集合 \(S\)

到右部集合 \(T\) 的邊數奇偶性,那麼 \(S, T\) 合併合法當且僅當:

\[f_S \oplus E_{S, T} \oplus g_T = 0 \]

直接這樣判定很沒有前途,因為 \(E\) 的總量已經達到了 \(2 ^ n\) 級別,因此考慮轉移判定方式。

\(p_S(S \subseteq S_1)\)\(S_2\) 中與 \(S\) 連邊為奇數的點構成的點集,那麼判定條件可以改寫為:

\[f_S \oplus ((p_S \& T) \& 1) \oplus g_T = 0 \]

注意到中間部分很特殊,於是我們考慮固定中間部分,統計:

\[h_Q = \sum\limits_{p_S \& T = Q} f_S \oplus g_T \]

即可 \(\mathcal{O}(2 ^ {n / 2})\)

計算答案。

注意到上式形式與與卷積非常類似,考慮將其轉化為與卷積的形式。

列舉 \(f_S = pf, g_T = pg\),令 \(vf_Q = \sum\limits_{p_S = Q} [f_S = pf], vg_Q = [g_Q = pg]\),那麼有 \(f_S = pf, g_T = pg\) 時對 \(h\) 的貢獻:

\[h_Q = \sum\limits_{S \& T = Q} vf_S \times vg_T \]

直接做與卷積即可,複雜度 \(\mathcal{O}(n2 ^ {n / 2})\)

GO!