poj 1719最大二分匹配hungary演算法

2021-07-05 01:35:25 字數 946 閱讀 9727

二分圖:如果乙個圖g,v能夠劃分成為兩個子集,v1,v2,而這兩個子集中的點兩兩不相鄰,則這個圖稱為二分圖

匹配:e的乙個子集e1,使得v1中的點至多只與v2中的乙個點相鄰,則我們可以稱為g1,則這個子圖為e的乙個匹配

最大匹配:如果乙個匹配所包含的邊最多,則稱為最大匹配.

hungary演算法:

圖論中一種計算最大匹配的演算法,其原理是遍歷圖中的v1每個結點,看他們是否能夠增廣進子圖中,判斷採用dfs,即對於乙個點v1,找到與其相鄰的乙個點,看其是否有匹配,若沒有則直接匹配,若有則拆點繼續深度搜尋.可以看出其複雜度為o(v^2e)

其偽**為:

void hungary(g)

bool dfs(int v1)//判斷點是否能夠增廣

return false

}

下面這一題的大意是這樣的:乙個射擊靶每一列兩個白色格仔,現在要求每一列正好擊中乙個白色格仔,且每一行都有白色格仔被擊中,問是否能夠完成這樣乙個匹配.

顯然,我們用每一列匹配每一行,但要注意r

附上源**:

#include#include#include#define v 1010

using namespace std;

int graph[v][v] , mat[v] , row , column;

bool chk[v];

bool dfs(int p)}}

return false;

}void hungary()

if(ans == row)}}

}cout << endl;

}else cout << "no" << endl;

return;

}int main()

hungary();

}return 0;

}

過山車(最大二分匹配)

題目鏈結 problem description rpg girls今天和大家一起去遊樂場玩,終於可以坐上夢寐以求的過山車了。可是,過山車的每一排只有兩個座位,而且還有條不成文的規矩,就是每個女生必須找個個男生做partner和她同坐。但是,每個女孩都有各自的想法,舉個例子把,rabbit只願意和x...

POJ 2594 最大二分匹配 最小路徑覆蓋

題目在 因為是按照分類做題目,所以在明知這個題目是 最小路徑覆蓋的時候,就匆忙寫好 提交,結果wa。而傳統的最小路徑覆蓋的結果中,不同路徑是不能出現重複點的。所以這個題目中的 兩個點之間是否可達就要重新定義了。因為可以過相同的點,所以可以認為兩個點,只要在按照圖遍歷的方法遍歷的時候能遍歷的到,就應該...

poj 3343 二分匹配 二分

題意 n個人類星球和m個外星人星球,每個星球 包括外星人的 都有乙個初始的飛船數sh1 i 還有乙個每年生產的飛船數p i 還有乙個n m的矩陣d,d i,j 表示從人類星球i到外星人星球j的年數 年啊 當乙個人類星球i可以擊敗乙個外星人星球j的唯一條件是在出發年數ye,ye d i,j p i s...