二分圖和匹配

如果一張圖的點集可以被分割成兩個點集,且在同個點集的任兩點沒有連邊,我們就叫這張圖為二分圖

 

等價:

這張圖是2-colorable

這張圖不存在奇環

二分圖?

dfs塗色看是不是2-colorable

二分圖判定?

動態加邊在線二分圖判定

拆點,v\rightarrow v^+,v^-\\ 加uv邊\rightarrow加u^+v^-,u^-v^+邊\\ 對所有的v,v^+和v^-不連通\leftrightarrow 圖不存在奇環

匹配

定義:一個匹配是圖的一個邊集\(M\),

             使得任兩條\(M\)中的邊沒有共同頂點

匹配?

  • 最大匹配:邊數最多的匹配
  • 極大匹配:不能再加邊的匹配
  • 完美匹配:所有點都被匹配到的匹配
  • 最大權匹配:邊權和最大的匹配
  • 最大權最大匹配:所有最大匹配中邊權和最大
  • 最大權完美匹配:所有完美匹配中邊權和最大

一些你有機會遇到的匹配

  • 交替路徑:從一個未匹配點出發,依次經過非匹配邊、匹配邊、非匹配邊…形成的路徑
  • 擴充路徑:交替路徑最後是未匹配點

 

      有擴充路徑->我們可以找到更大的匹配

最大匹配?

  • 對一個圖\(G\)中的匹配\(M\),                                                 \(M\)是最大匹配若且唯若不存在擴增路徑
  • (=>)剛講了
  • (<=)假設\(M\)沒有擴增路徑但存在更大的匹配\(M'\):

       去看\(M\)和\(M'\)的對稱差構出的圖\(H\),

       \(H\)上每個點deg都\(\leq 2\)

  =>\(H\)是一些環和路徑

  =>其中只有擴增路徑會讓\(M'\)贏

  =>大爆炸

Berge's Theorem

  • 用flow可以做到\(O(\sqrt{|V|}|E|)\),下星期的flow講師說他要講為什麼是\(\sqrt{|V|}\)
  • 我們試著用前面找增廣路的想法
  • 以每個左邊的未匹配點為起點找增廣路
  • \(O(|V||E|)\):好想變\(O(\sqrt{|V|}|E|)\)喔->hopcroft karp

二分圖匹配

bool vis[MAXN];
int match[MAXN];
vector<int> e[MAXN];
bool dfs(int now){
  	vis[now]=1;
    for(auto x:e[now]){
        if(match[x]==0||(!vis[match[x]]&&dfs(match[x]))){
            match[x]=now;
            match[now]=x;
            return 1;
        }
    }
    return 0;
}

二分圖和他的快樂夥伴

一張二分圖有\(X\)-完美匹配若且唯若\(\forall S\subset X\),\(|N(S)|\geq|S|\)

(=>)隨意

(<=) 開心數歸,分存在一個 \(S\subset X,|N(S)|=|S| \)(就可以把這些人抓出來) 和其他

 

 

 

有用到hall的oi題:暴雷

hall定理

  • 點覆蓋:一個點集使得所有邊都和該集合的點相鄰
  • 點獨立集:一個點集\(S\)使得\(S\)內任兩個點不相鄰。
  • 邊就把點換成邊,邊換成點
  • 邊獨立集就是匹配
  • 對所有圖有|最大匹配| + |最小邊覆蓋|=|最小點覆蓋| + |最大獨立集|= |V|

覆蓋

對任意二分圖\(G\),其最大匹配的大小等於其最小點覆蓋的大小:

(\(\leq\))每個匹配邊都至少需要一個點來覆蓋

(\(\geq\))我們構造一個大小和最大匹配一樣大的點覆蓋:

設\(X\)中所有未被匹配的人可以走交錯路徑到的地方為\(S\),選\((X\setminus S)\cup(Y\cap S) \),要驗他真的是點覆蓋還有他大小真的和最大匹配一樣大

Kőnig定理

最大權

最大權最大匹配->最大權匹配?

 

最大權匹配->最大權最大匹配?

在\(K_{n,n}\)中求最大權完美匹配

 

 

KM

我們將每個點標上一個值\(l(v)\)讓任意邊\(e=(u,v)\)有\[l(u)+l(v)\geq w(e)\]

發現到頂標和\(\geq\)任何完美匹配權重和

任何合法頂標和\(\geq\)最大完美匹配權重和

 

頂標

想要找到一種緊邊完美匹配:

  1. 在緊邊上找到擴充路徑
  2. 在沒有擴充路徑時動點權讓我們有更多緊邊:

       那我們從\(v\)(假設\(v\in X\))開始走了一個交錯樹

       設走到的是\(S_X\)和\(S_Y\)

       要能有擴充路徑就得要有邊在\(S_X\)和\(Y\setminus S_Y\)

      把這些邊抓出來算\(\min(l(u)+l(v)-w(e))=\delta\)

      把\(S_X\)的頂標\(-\delta\),\(S_Y\)的頂標\(+\delta\)

把\(O(n^4)\)變成\(O(n^3)\):這裡

緊邊匹配

題目們

亂抓一通

其他東西

所以我們來看酷東西

沒人要寫縮花

\(T(G)_{i,j}=0 \)若沒有\((v_i,v_j)\)這條邊

               \(=x_{i,j}\)若有\((v_i,v_j)\)這條邊且\(i<j\)

               \(=-x_{i,j}\)若有\((v_i,v_j)\)這條邊且\(j<i\)

tutte matrix

只有偶環覆蓋有用

有完美匹配\(\iff \)行列式不為0

最大匹配的size*2\(=T(G)\)的秩

講師太笨還不會

你們自己go

構解

Minimal

By owoovo

Minimal

  • 94