以下考慮完備匹配的必須邊(非完備匹配要用到網路流)
給定一張二分圖,其最大匹配方案不一定是唯一的。若任何一個最大匹配方案的匹配邊都包括\((x,y)\),則稱\((x,y)\)為二分圖匹配的必須邊
以下證明假設我們已經求出了一個最大匹配
在完備匹配時,一條邊\((x,y)\)是必須邊,當且僅當滿足以下兩個條件:
1.在當前這個完備匹配的狀態下,\((x,y)\)是匹配邊
2.在當前這個完備匹配的狀態下,直接從圖中刪除\((x,y)\)這條邊之後,不能再找一條增廣路,其起點是\(x\),終點是\(y\)
第一個條件顯然,下面的證明就忽略了
必要性。利用反證。如果去掉\((x,y)\)後,還能再找到這麼一條增廣路,那麼我們把這條增廣路取反,顯然匹配數加一,此時等於最大匹配,而且這個最大匹配不再包含\((x,y)\)這一條邊,所以\((x,y)\)不是必須邊,矛盾,故不能找到這麼一條增廣路
充分性。仍然利用反證。如果\((x,y)\)不是必須邊,那麼就說明去掉\((x,y)\)後的圖的最大匹配仍然是完備匹配,我們不妨重新排序把\(x\)和\(y\)這兩個點放在最後,並且認為前面在跑匈牙利演算法的時候跑出來的匹配情況與最開始的完備匹配去掉\((x,y)\)後剩下的邊的匹配情況相同(匈牙利演算法是不看順序的,而且只執行一遍,故這個換序不會影響結果),那麼這個匈牙利跑出來的結果應該是完備匹配。我們在匈牙利的最後,考慮\(x\)和\(y\)這兩個點(此時,現在的這個圖與最開始的完備匹配的那個圖的差距僅僅是少了\((x,y)\)這一條邊),如果找不到\(x\)到\(y\)的增廣路,那麼\(x\)肯定匹配失敗,故匈牙利跑出來的結果不再是最大匹配,矛盾,所以\((x,y)\)是必須邊
如果我們把二分圖中的非匹配邊看作從左部到右部的有向邊,把二分圖中的匹配邊看作從右部到左部的有向邊,構成一張新的有向圖,那麼原圖中從\(x\)到\(y\)有增廣路等價於新圖中存在從\(x\)到\(y\)的路徑。這一個用充分必要性證明就可以了,比較簡單
因此,必須邊的判定條件是:\((x,y)\)是原圖的匹配邊,並且\(x\)和\(y\)兩點在新圖中屬於不同的SCC