容斥與反演
容斥
之前從沒有搞清楚的:
容斥是一種方法,為了做到不重複計數,先算總和再去除重複的方法。
所以我們可以計算任意具備一種性質的元素個數(並),透過計算“至少具備了某些元素的個數”(交)。
另一種形式:總數-不滿足所有性質的元素=任意滿足一種性質的元素
此時,不滿足所有性質即可表示為 \(\sum_S(-1)^{n-|S|}P(S)\) 其中 P(S) 表示滿足 S 中所有性質的個數。
-
小星星 [ZJOI2016]:
-
樸素 dp:令 \(f(i,j,S)\to\) [int:子樹i,int:i對映到j,set:子樹中的對應編號集合|的方案數]
-
考慮最佳化,尋找 dp 重複做了什麼,哪些限制會導致複雜度高,可不可以不做
-
由於我們要避免重複對映,所以要儲存子集。
-
所以考慮容斥解決這個問題
-
恰好不好滿足,就可以轉化為至少至多
-
\(=\) 或 \(\neq\)
-
\(\min\) 或 \(\max\)
-
至少或至多
-
其他限制難以計算的時候
例子:用這個把他變成別的條件!
那麼我們就希望,存在 \(f_i\):
那麼可以遞推求 \(f\),則答案:
反演
- 本質
二項式反演
- 再探錯排
令 \(g_n\) 表示所有人隨便站,\(f_n\) 表示恰好 \(n\) 個人站錯的方案數。
那麼 \(g,f\) 滿足上述 \((1)\) 式。可惜我們要求 \(f_n\) 。
- 證明 (vfk)
考慮這個
正確性顯然
使用二項式定理展開 \((1-1)^n\) 可得,並代入
最後一個式子後面的求和即為 \(g\)
- 其他形式
常用限制放縮方法。比起容斥,這時我們不必推導容斥係數。
-
P4859已經沒有什麼好害怕的了:
放鬆限制,允許有一定重複,這樣就不錯了。
子集反演
- 高維字首和/子集和
實際上認為每一個二進位制數的位是一個維度,取值0/1,即有 n 個維度的字首和
-
一維字首和:掃一遍
-
二維字首和:先掃x再掃y
-
高維字首和:一維一維掃
組合意義:若 F 是 G 的高維字首和,則 G 是 F 的高維差分。
- kosare
- Ribbons on Tree
min-max 反演
-
按位或:考慮時間問題使用 \(\text{min-max}\) 容斥。將最大的時間戳變成最小的。
只需高維字首和。
斯特林反演
- 方陣
只有行列其中一個的限制很容易,考慮用這個計算答案。看作分成若干等價類,則存在Stirling 反演的式子。
- *異或圖
容斥/反演掉連通圖限制。即考慮 總共-不連通 \(\iff\) 總共-多個連通塊的
可列舉子集劃分,每個子集隨便連,這樣就有若干連通塊(大於等於子集劃分個數的方案數)。
這就是至少的意義: