容斥原理與Minmax容斥


@

普通容斥

容斥原理的本質是加上一堆模糊的可能取值,然后不斷逼近真取值

也就是有一些只滿足一部分條件的答案被多/少統計了,容斥原理可以處理此類問題

容斥原理由兩部分構成,容斥系數和容斥統計的狀態

用數學表達式來統計:

\[\sum_{T \subset S}^{|T|\le|S|} f(T)*w(T) \]

\(f(T)\) 要考慮把一些東西消掉,常用的有\(-1^{|T|}\)或者\(-1^{|T|-1}\)

\(w(T)\) 即為T狀態對答案的貢獻

怎么用容斥解題呢?

  1. 列出題目中所有條件,對每個條件分別求解
  2. 如上,考慮出現重復
  3. 於是枚舉\(2^n\)個集合,相似的集合可以合並求解
  4. 貢獻乘上容斥系數,求\(\sum\)

是⑧是很淺顯?

例題選講

歐拉函數

求1~n之間與n互質的數的個數

我們定義狀態集合為包含幾個因子

顯然地,答案為\(n - \sum_x (gcd(n,x)\neq 1)\)

因為是第一個例題就詳細理解一下吧

首先,答案一定包含於所有因子\(\le n\)的倍數中

而這些因子又有重復的

於是考慮把為同時兩個因子的倍數減掉

那么又多減了同時為三個因子的倍數,要加上

然后類似地遞歸,數學歸納得到容斥的公式

枚舉每個因⼦放與不放 ——apiadu

經典題目

N個變量xi,每個變量滿⾜\(0\le xi\le Ci\)
\(\sum x=A\)的解的數量

然后考慮沒有限制的時候怎么放

跟隔板法差不多,就是把A看成A個小球,求分割方案數

顯然是\(C(A+1,N)\)

然后考慮欽定 \(K\) 個數,這些數的第i個必須\(\geq C_i\)

也挺好做的,先把A減去\(C_i\)就跟無限制一樣了

這樣是\(2^n\)

好像還有第二檔

因為某些原因鴿了(2019/7/30 要打CFdiv2(探底)於是沒去答疑

QQ上問了杜老師還沒回就先這樣

SetAndSet

把n個數分成兩個集合使得結果一樣

分析一下?

結果一樣必然二進制下每一位都一樣

則套上容斥,對於每個條件考慮反面:所有1在一邊,另一邊全是0 或者沒有

對於每一位同是1的連一條邊,對於處理的K個數取出查看有多少個連通塊

如果不符合條件的話,至少有一個連通塊的數在一起

這是此時總方案數就是\(2^{連通塊數}\)

然后外面再乘一個其他數隨便分配的組合數就好了

ZJOI2016 小星星

n個點的樹,求一個排列p,使樹上有(u,v)的邊,圖里有(pu,pv)的邊

出現=無限制-沒有出現

全都沒有限制\(dp[u][v]\) ->u對應v,已經求完了子樹

\(dp[u][v]=\prod_{s \in son(u)} (\sum dp[s][t]*w[v][t])\)

\(w[v][t]\) 表示\(v\)\(t\)在圖上是否連通

解釋一下,只在圖上聯通的兒子才加上它的dp值

有限制不能出現就把邊刪掉(開個vis)

復雜度\(2^n*n^3\) 空間\(O(n^2)\)

經典問題

把k分解成若干因數的乘積,因子有順序求方案數

讀入方式:\(n=p_1^{e_1}+p_2^{e_2}+p_3^{e_3}+...+p_m^{e_m}\)

\(\sum e_i \leq 1e5\)

看完題后直覺:不是沙雕dp嗎?

dp做不了的。。

其實是容斥然后類似隔板法一樣的來求方案數

固定\(i\)個因子為1

答案為\(\sum _{i=0} ^{m-1} ans_i*f(i)\) ,ans為固定i個為1的方案數,f是容斥系數

\(i\) 個1除掉之后的方案數,其他數沒有限制的方案數就好算了啊QwQ

方案數等於\(C(k,i) * \prod _{j=1} ^m C(e_j+k-i-1,k-i-1)\)

即枚舉k里選哪\(i\)個不是1,組合數求方案

經典問題2

給出全集大小,每次產生子集S的概率為P(S),求期望步數

容斥與期望結合

由於期望的線性性,容斥完取期望等於期望的容斥

考慮對每個子集T計算不止所有T的子集在T內的期望,那么要把重復的消掉

對於每個元素T,套路地使它在偶數時被消掉,奇數時加上(這個可以舉幾個例子來判斷容斥系數,我比較菜所以不會推

然后枚舉子集容斥就可以了

\[E(S)=\sum _{T \subsetneqq S} \frac{(-1)^{|S|-|T|-1}}{1-P'(T)} \]

如上,\(P'(T)\)表示所有子集都在\(T\)內的概率,運用上一篇博客里的公式得到期望

Minmax 容斥

結論

\(Max(S)=\sum_{T \in S} Min(T) * f(i)\)

其中\(f\)為 容斥系數,此處取\(-1^{|T|-1}\)

同理,對於\(Min(S)\)也成立(但是用\(Max\)的情況較多

證明

首先證明可以取到\(Max(S)\),即對於只包含\(Max(S)\)的集合,\(Min(T)\)等於\(Max(S)\)

然后對於其他的值取最小值時,集合大小為奇數時加上,大小為偶數時減掉,而選奇數個和選偶數個的方案數又是一樣的,於是抵消掉了

由期望的線性性可得,對於每個數取期望時也成立

例題選講

simple例題

搞一個課堂上還記得的:

\(n\)道題,每道題聽懂概率\(P_i\),求全部聽懂次數

顯然是每道題聽懂期望次數的\(Max\),於是變成\(Minmax\)模板題

運用\(Minmax\)容斥可以把問題變成求一個集合中至少出現一個數的期望,就很簡單了

[HAOI2015]按位或

顯然為每個位置都取到1的期望步數,即為最晚的位置變成1的時間

那么\(E(Min)\)的取值就是\(\frac{1}{\sum _{g \and T≠ϕ} P[g]}\)

這個東西再套一層簡單容斥然后轉化成求T補集的子集,然后再用1減

這個子集前綴和就跟高維前綴和一樣搞搞就行了

簡單容斥——補集思想

雜題選講

  1. 同色三角形

    完全圖每條邊紅黑染色,求同色三角形個數

    不合法三角形:異色角/2 可以畫圖理解

    然后枚舉每個點枚舉每條邊,每個點答案貢獻為紅邊*黑邊/2

    最后用C(n,3)減一下

  2. CF297E

    如果把每條線對應成一個點,若兩條線交叉則在所對應的兩點間連紅邊,否則連藍邊,那么我們就得到了一個含n個節點的完全圖G。可以發現,第一種方案對應G中的一個紅色三角形,第二種方案對應G中的一個藍色三角形。

    問題就轉化成純色三角形個數就好了

    枚舉一條線段,另一側選兩條

    問題轉化為求一些幾何圖形的方案數,筆記上是第一種和第三種

    還有。。如果你不是正睿上課的同學

    無可奉告I'm angry!

  3. n點聯通圖計數

    總圖個數 - 不連通

    令 f(n) = 連通圖個數

    $f(n) = 2^{C(n,2)} - \sum _{i=1}^{n-1} C(n-1,i-1) *f(i) *2^{n-1,2} $

    歐拉圖:度數都是偶數且聯通

    f(n) = 總的度數為偶數的個數

    \(f(n) = 2 ^{C(n-1,2)}\)

    先把\(n-1\)個點連完,如果度數奇數就和\(n\)

    \(f(n) = 2^{C(n-1,2)} - \sum _{i=1}^{n-1} C(n-1,i-1) *f(i) *2^{C(n-i-1,2)}\)

  4. 連邊 bzoj2169

    有N個點(編號1到N)組成的無向圖,已經為你連了M條邊。請你再連K條邊,使得所有的點的度數都是偶數。求有多少種連的方法。要求你連的K條邊中不能有重邊

    但和已經連好的邊可以重。不允許自環的存在。求連邊的方法數。我們只關心它模10007的余數。

    \(f[i][j]\)為選了i條邊,j個點度數為奇數

    \[f[i][j]=f[i-1][j-2]*C(n-j+2,2)+f[i-1][j]*(n-j)*j+f[i-1][j+2]*C(j+2,2)-f[i-2][j]*(C(n,2)-i+2) \]

    即分為以下情況討論:

    1. 連兩個度數為奇數的邊 ,j-2

    2. 連一奇一偶,j不變

    3. 連兩個偶數,j+2

    4. 減去連的重邊 ,i-2選的情況和i選的情況有一部分是相同的

      最后除以\(k!\)

  5. 樹的最短路徑期望

    有一棵樹,樹的邊權都是1,隨機選k個點

    在上面走,最路徑時間走k個點,求期望時間

    對於一條邊,左右兩邊都有關鍵點,必須走兩次

    然后可以減去最遠的兩個點的路徑長(期望的線性性)

    就變成了\(\frac{C(n,k)-C(size_l,k)-C(size_r,k)}{C(n,k)}\) - \(\sum P(u,v)*w(u,v)\)

    考慮在P(u,v)在選出來的點兩兩路徑構成的樹上成為直徑的概率

    如果(u,v)是直徑,則有對於任意的x

    \(d(u,x)\leq (u,v)\)

    \(d(v,x)\leq d(u,v)\)

    但是有重復,考慮令u的字典序最小,不妨設\(u<v\)

    對於\(d(u,x)=d(u,v),d(v,x)<d(u,v)\),使\(x>v\)

    同理對於\(d(u,x)<d(u,v),d(v,x)=d(u,v)\),使4x>u$

    對於\(d(u,x)=d(u,v),d(v,x)=d(u,v)\),使\(x>max(u,v)\)

    這樣每棵樹的每條直徑都只算了一次

  6. company Acquisitions

    有若干公司,每個節點可能是根節點,也可能是自己點

    每次選兩個根,一個變成另一個的兒子,而它的兒子變成根

    求只有一個根的期望步數

    設計狀態\(C(x)\) 為一個點為根且有i個兒子對答案的貢獻

    \(C(x)+C(y)=1+1/2*(C(x+1)+y*c(0))+1/2*(C(y+1)+x*c(0))\)

    解得\(c(x)=1/2(c(x+1)+x*c(0)+1)\)

    \(c(n-1) = 0\)

  7. Segment

    隨機構造一個線段樹:有\((1,n)\)個線段,每次選中間一個點\(x\)(隨機),然后遞歸下去選,直到\(l=r\)

    \(q\)次詢問問區間\((l,r)\)會訪問幾個區間

    考慮詢問\([x,y]\)\(l\leq x,r\geq y\),一定被經過

    相交的區間也一定被經過

    包含於它的區間取決於樹的形態

    怎么拆后者的期望?答案是葉節點 - 包含且非葉區間個數

    問題好像就很顯然了?(

    常見的轉化。——apiadu

    得到答案\(=\)\((l,r)\)相交或包含$(l,r) - \(被\)(l,r)$嚴格包含且非葉節點 + 包含葉子個數

    定義第一類區間權值為1,第二類-1,第三類1

    用期望線性性拆開,相當於求\([x,y]\)出現的概率,乘上對應的權值(1或者-1)

    怎么求概率呢?

    考慮隨機生成割開位置的排列

    則x,y 區間出現意味着x-1號隔板和y號隔板比他們中間的模板都先出現

    左右端點特殊考慮一下!

    可惜的是這題並不能\(n^2*m\)

    至於剩下考慮如何快速算出來,搞搞前綴和

    技術性細節不講 ——apiadu

按時間分治

考慮離線,邊加入和刪除,可以理解為在一段時間內存在這條邊

然后對時間建線段樹,然后dfs時間線段樹

訪問到T把T所有邊加入並查集

訪問左右節點,訪問完左節點撤銷左節點操作(不能路徑壓縮並查集!)(要按秩合並 撤銷的時候判斷一下

在葉節點回答查詢就可以了

后記

有用的東西:期望 = 總和 / 總方案數

下午四點之后杜教就開始放飛自我力(悲

然后我就自閉了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM