#include#include#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
using
namespace
std;
const ll maxn = 550
;const ll inf = 1000000009
;ll n, m, e;
ll love[maxn][maxn];
//記錄每個妹子和每個男生的好感度
ll ex_girl[maxn]; //
每個妹子的期望值
ll ex_boy[maxn]; //
每個男生的期望值
bool vis_girl[maxn]; //
記錄每一輪匹配匹配過的女生
bool vis_boy[maxn]; //
記錄每一輪匹配匹配過的男生
ll match[maxn]; //
記錄每個男生匹配到的妹子 如果沒有則為-1
ll slack[maxn]; //
記錄每個漢子如果能被妹子傾心最少還需要多少期望值
bool dfs(int
girl)
}else
}return
false;}
ll km()
}//嘗試為每乙個女生解決歸宿問題
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
for (int j = 0; j < m; j++)}}
//匹配完成 求出所有配對的好感度的和
ll res = 0, cnt = 0
;
for (int i = 0; i < m; ++i)
}if (cnt != n)return -1
;
return
res;
}int
main()
cout
<< "
case
"<< cas++ << ": "
; cout
<< km() <}
return0;
}
二分匹配演算法
匈牙利演算法求二分匹配 下 include includeusing namespace std int v 頂點數 vectorg max v 圖的鄰接表表示 int match max v 所匹配的頂點 bool used max v dfs 中用到的訪問標記 向圖中增加一條連線 u 和 v 的...
求最大權二分匹配的KM演算法
最大權二分匹配問題就是給二分圖的每條邊乙個權值,選擇若干不相交的邊,得到的總權值最大。解決這個問題可以用km演算法。理解km演算法需要首先理解 可行頂標 的概念。可行頂標是指關於二分圖兩邊的每個點的乙個值lx i 或ly j 保證對於每條邊w i j 都有lx i ly j w i j 0。如果所有...
二分匹配 匈牙利演算法
這個演算法真心很精妙,其實 很簡單,但是理解其中的奧秘還真要花點時間 matrix67大牛說的好 說穿了,就是你從二分圖中找出一條路徑來,讓路徑的起點和終點都是還沒有匹配過的點,並且路徑經過的連線是一條沒被匹配 一條已經匹配過,再下一條又沒匹配這樣交替地出現。找到這樣的路徑後,顯然路徑裡沒被匹配的連...