(匈牙利模板)二分圖匹配-poj-2226


匈牙利算法

用於二分圖最大匹配。



步驟:

1、這是待匹配的二分圖。

2、開始匹配第一個A1,隨便匹配第一個B1,肯定會成功的啦。然後匹配左邊第二個A2,發現匹配不成功。

3、於是B1斷開原有連接,讓原有的左邊A1去找下一個匹配,發現下一個匹配成功。

4、然後匹配A3,發現B1已經連接,那就斷開原有連接。但是斷開原有連接,發現A2匹配失敗了,於是A3繼續匹配下一個,發現匹配成功。

5、接下來匹配A4.





這就是匈牙利算法,我跑了題目大概是32ms。

或者是建立一個超級源和一個超級匯。跑最大流求二分圖最大匹配,大概是16ms。

匈牙利模板:





然後講一下poj2226

題意:有一片N×M的草地,上面有一些方格有泥巴,現在需要橫橫豎豎放一些任意長度的木條,但不能鋪在草地只能鋪在木板上,木板可以被其他木板覆蓋,問最少需要幾條木板。


解法:對於每一個泥巴方塊,要麼是被橫木板覆蓋,要麼是被豎着的木板覆蓋。

把每一段橫着的連續條條看作一個頂點,把每一段豎着的連續條條看作一個頂點,如果橫着的條條和豎着的條條有交點,那麼就從一個頂點到另一個頂點連一條邊,每一次連的邊和泥巴方塊是一一對應的。所以現在的問題就變成,求這個二分圖的最小點覆蓋數。由二分圖公式:最小點覆蓋數(設有一個有n個頂點的集合S,圖中任意一條邊都有至少一個頂點屬於這個集合。PS:也有可能一條邊的兩個點都屬於這個集合)=最大匹配數,即可知只要求最大匹配就OK。








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章