集合冪級數感性學習筆記

2022-10-08 20:54:10 字數 3659 閱讀 5030

集合冪級數的性質真的太美了。這裡簡要記錄一些操作。

下文若無特殊說明集合冪級數間乘法定義為集合不交並卷積(子集卷積)。

對於集合不交並卷積,常見的處理方法是設出佔位多項式,對兩維分別卷積。實際上這兩維是十分獨立的,類似於二元生成函式的兩個形式冪。因此針對集合冪級數進行的運算,由於我們在佔位維上的運算就是普通卷積,所以可以直接每個佔位維 fwt 或卷積完後做數列意義上的各種運算。

設集合冪級數 \(f\),其乘法逆定義為集合冪級數 \(g\) 使得 \(f\cdot g = x^\)。根據暴力求逆公式,我們有:

\[g_ = -\dfrac\sum\limits_^g_i f_

\]邊界 \(g_ = \dfrac\)

例題

你有乙個 \(n\) 個節點的有向圖,我們稱乙個合法的方案是將其中一些邊的方向翻轉之後使得剩下的圖無環。請對於所有合法的方案,將方案中翻轉方向的邊的數量求和。

答案對 \(998244353\) 取模。

source:「ceoi2019」amusement park

若翻轉 \(s\) 中的邊能形成 dag,那麼翻轉 \(e/s\) 中的邊就會形成反向的 dag,兩種方案加起來翻轉 \(m\) 條邊。問題轉化為本質不同 dag 計數。

dp 解決這個問題。設 \(f_\) 表示考慮集合 \(s\) 中的點能形成多少種本質不同 dag。考慮把圖按照拓撲序序分層,每次加入一層點。這裡需要規定加入的點集是獨立集。列舉新加入的層中有哪些點轉移。還有乙個問題是會算重,手玩一下得到容斥係數是 \((-1)^\),得到轉移:

\[f_ = \sum\limits_f_ (-1)^[t是獨立集]

\]把後面那一堆記作 \(g_\),規定 \(g_=0\),設出集合冪級數,得到:\(f = f\cdot g+1\),即 \(f=\dfrac\)。求逆即可。

集合冪級數 \(\exp\) 的組合意義和 egf 是類似:把集合劃分為若干不交集合的方案數,展開之後很好感性理解。值得注意的是,為了保證收斂性質,在 \(\exp\) 和 \(\ln\) 時保證 \(f_=0\)。對於求法,同樣我們考慮 exp 的定義:設 \(g=\exp f\),則 \(g^ = f^\exp f = f^g\)。考慮其第 \(i-1\) 項係數,則:

\[ig_i = \sum\limits_^g_f_(i-j)

\]邊界 \(g_ = 1\),據此遞推。

例題

給定乙個長度為 \(n\) 的非負整數序列 \(a=\\),對於 \(a\) 的乙個子串行 \(b=\,a_,\cdots,a_\}\)(\(0\le m\le n\),\(1 \le b_1 \lt b_2 \lt \cdots \lt b_m \le n\),下同),稱 \(b\) 是 \(a\) 的優秀子串行當且僅當,其任意兩個不同元素的按位與結果均為 \(0\),即:\(\forall 1\le i \lt j\le m\),滿足:\(a_~\mathrm~a_=0\),其中 \(\mathrm\) 是按位與運算。

對於子串行 \(b=\,a_,\cdots,a_\}\),我們定義其價值為 \(\varphi \left(1+\sum\limits_^m a_\right)\),其中 \(\varphi(x)\) 表示小等於 \(x\) 的正整數中與 \(x\) 互質的數的個數。

現在請你求出 \(a\) 的所有優秀子串行的價值之和,答案對 \(10^9+7\) 取模。

source:「noi online 2020 提高組」優秀子串行 (sequence)

優秀子串行的定義完美契合了子集卷積。把 \(0\) 去掉之後單獨處理,記 \(c_i = \sum[a_j=i]\),我們想要的是 \(f_\) 表示子集和為 \(s\) 的方案數,這等價於將 \(s\) 劃分成若干集合的方案數,和 \(\exp\) 的意義是如此的一致。因此對 \(c\) 做 \(\exp\) 即可。

\(\ln\) 依然定義為 \(\exp\) 的逆運算。求法同意根據定義,設 \(g=\ln f+1\),則 \(g^ = \dfrac}\)。取 \(i-1\) 項係數,有:

\[ig_i = if_i - \sum\limits_^g_j\cdot j\cdot f_

\]例題

給定無向圖,求連通子圖個數。

分別設 \(f_,g_\) 表示點集 \(s\) 能生成的子圖個數和連通子圖個數,顯然有 \(f = \exp g\),即 \(g = \ln f+1\)。

針對一類列舉子集轉移的 dp 問題,我們可以通過轉成集合冪級數通過預處理或卷積降低複雜度。

例題

小 s 現在擁有 \(n\) 座城市,第 \(i\) 座城市的人口為 \(w_i\),城市與城市之間可能有雙向道路相連。

現在小 s 要將這 \(n\) 座城市劃分成若干個州,每個州由至少乙個城市組成,每個城市在恰好乙個州內。

假設小 s 將這些城市劃分成了 \(k\) 個州,設 \(v_i\) 是第 \(i\) 個州包含的所有城市組成的集合。定義一條道路是乙個州的內部道路,當且僅當這條道路的兩個端點城市都在這個州內。如果乙個州內部存在一條起點終點相同,不經過任何不屬於這個州的城市,且經過這個州的所有內部道路都恰好一次的路徑(路徑長度可以為

\(0\)),則稱這個州是不合法的。

定義第 \(i\) 個州的滿意度為:第 \(i\) 個州的人口在前 \(i\) 個州的人口中所佔比例的 \(p\) 次冪,即:

\[\left( \dfrac w_x}^i \sum_w_x} \right)^p

\]定義乙個劃分的滿意度為所有州的滿意度的乘積

求所有合法的劃分方案的滿意度之和。

答案對 \(998244353\) 取模。

兩個劃分 \(\\) 和 \(\\) 是不同的,當且僅當 \(k \neq s\),或存在某個 \(1 \le i \le k\),使得 \(v_i \neq c_i\)。

source:「wc2018」州區劃分 (walk)

乙個點集合法當且僅當其生成子圖中不存在尤拉迴路且點集大小大於 \(1\)。設 \(f_\) 表示考慮了點集 \(s\) 中的結點的答案,有轉移:

\[f_ = \dfrac^p}\sum\limits_f_\cdot w_^p[t合法]

\]後面的部分可以預處理,記 \(g\) 為後面部分的集合冪級數。由於在這裡還有乙個係數,我們並不能使用前面提到的求逆技巧。但我們可以使用佔位多項式優化轉移。首先注意到轉移可以按照集合大小進行,因此我們引入佔位維,先進行 fwt 或卷積的預處理,然後按照佔位維大小(即集合大小)遞推。

時間複雜度 \(o(n^22^n)\)。

剛開始你有乙個數字 \(0\),每一秒鐘你會隨機選擇乙個 \([0,2^n-1]\) 的數字,與你手上的數字進行或運算。選擇數字 \(i\) 的概率是 \(p[i]\)(保證 \(0\leq p[i]\leq 1\),\(\sum p[i]=1\)) 問期望多少秒後,你手上的數字變成 \(2^n-1\)。

source:「hnoi 2015」按位或 (set)

設 \(p\) 的集合冪級數為 \(p\),則根據期望的定義,答案可以寫成 \([x^]\sum\limits_ k(p^k-p^) = [x^u]\sum\limits_-p^\)。定義乘法為或卷積,fwt 即可得到答案。

學習筆記 集合冪級數

我們要求形如這樣的乙個卷積 h s sum sum l cup r s f l g r 回憶一下之前所學的莫比烏斯反演,本質上是把質因子看成多重集合,這裡的集合並等價於莫比烏斯反演的兩個數的 text 不妨直接對這個集合做莫比烏斯變換,定義 f s sum f t f s sum 1 f t 對這個...

學習筆記 FWT及集合冪級數入門

相比與 rm ntt fft 中的加法卷積,這裡支援了位運算卷積,原理基於集合冪級數研究 vfk 的 閱讀沒有任何門檻,所以就不抄一遍了 code displayinline void and int f,int lim,int opt void operator const node p node...

Opencv學習筆記之感性區 ROI

opencv3程式設計入門 系列學習筆記 roi 感興趣 說明 roi就是影象分析所關注的重點,劃定乙個區域,以便進行進一步處理,同時可以指定想要讀入的目標,減少處理時間,增加精度。設定roi常用的兩種方式 第一種 使用表示矩形區域的rect.由左上角的座標 建構函式前兩個引數 和矩形的長寬 建構函...