lg容斥與反演

haozexu發表於2024-08-12

容斥與反演

容斥

之前從沒有搞清楚的:

容斥是一種方法,為了做到不重複計數,先算總和再去除重複的方法。


所以我們可以計算任意具備一種性質的元素個數(並),透過計算“至少具備了某些元素的個數”(交)。

另一種形式:總數-不滿足所有性質的元素=任意滿足一種性質的元素

此時,不滿足所有性質即可表示為 \(\sum_S(-1)^{n-|S|}P(S)\) 其中 P(S) 表示滿足 S 中所有性質的個數。

  • 小星星 [ZJOI2016]:

  • 樸素 dp:令 \(f(i,j,S)\to\) [int:子樹i,int:i對映到j,set:子樹中的對應編號集合|的方案數]

  • 考慮最佳化,尋找 dp 重複做了什麼,哪些限制會導致複雜度高,可不可以不做

  • 由於我們要避免重複對映,所以要儲存子集。

  • 所以考慮容斥解決這個問題

  • 恰好不好滿足,就可以轉化為至少至多


  1. \(=\)\(\neq\)

  2. \(\min\)\(\max\)

  3. 至少或至多

  4. 其他限制難以計算的時候


例子:用這個把他變成別的條件!

那麼我們就希望,存在 \(f_i\)

\[\sum_{i=0}^m{m\choose i}f_i=a_m \]

那麼可以遞推求 \(f\),則答案:

\[ans=\sum_{i=0}{n\choose i}(n-i)!f_i \]

反演

  • 本質

二項式反演

\[\begin{align} &g_n=\sum_{i=0}^n{n\choose i}f_i\\ \iff&f_n=\sum_{i=0}^n{n\choose i}(-1)^{n-i}g_i \end{align} \]

  • 再探錯排

\(g_n\) 表示所有人隨便站,\(f_n\) 表示恰好 \(n\) 個人站錯的方案數。

那麼 \(g,f\) 滿足上述 \((1)\) 式。可惜我們要求 \(f_n\)

  • 證明 (vfk)

考慮這個

\[f_n=\sum_{m=0}^n[n-m=0{n\choose m}f_m \]

正確性顯然

\[\sum_{k=0}^n(-1)^k{n\choose k}=[n=0] \]

使用二項式定理展開 \((1-1)^n\) 可得,並代入

最後一個式子後面的求和即為 \(g\)

  • 其他形式

常用限制放縮方法。比起容斥,這時我們不必推導容斥係數。

  • P4859已經沒有什麼好害怕的了:

放鬆限制,允許有一定重複,這樣就不錯了。

子集反演

  • 高維字首和/子集和

實際上認為每一個二進位制數的位是一個維度,取值0/1,即有 n 個維度的字首和

  • 一維字首和:掃一遍

  • 二維字首和:先掃x再掃y

  • 高維字首和:一維一維掃


\[\begin{align} &F[S]=\sum_{T\subset S}G[T]\\ \iff&G[S]=\sum_{T\subset S}(-1)^{|S|-|T|}F[T] \end{align} \]

組合意義:若 F 是 G 的高維字首和,則 G 是 F 的高維差分。


  • kosare

  • Ribbons on Tree

min-max 反演

\[\max\{S\}=\sum_{T\subset S}(-1)^{|T|+1}\min\{T\} \]

\[\operatorname{kthmax}(S)=\sum_{T\subset S}(-1)^{|T|-k}{|T|-1\choose k-1}\min(T) \]


  • 按位或:考慮時間問題使用 \(\text{min-max}\) 容斥。將最大的時間戳變成最小的。

    只需高維字首和。

斯特林反演

\[\def\stira#1#2{\begin{bmatrix}#1\\ #2\end{bmatrix}} \def\stirb#1#2{\begin{Bmatrix}#1\\ #2\end{Bmatrix}} \]


  • 方陣

只有行列其中一個的限制很容易,考慮用這個計算答案。看作分成若干等價類,則存在Stirling 反演的式子。

  • *異或圖

容斥/反演掉連通圖限制。即考慮 總共-不連通 \(\iff\) 總共-多個連通塊的

可列舉子集劃分,每個子集隨便連,這樣就有若干連通塊(大於等於子集劃分個數的方案數)。

這就是至少的意義:

相關文章