如果二分图的每条边都有的一个权值,如何求出权值和最大(最小)的匹配;
最小权值匹配可以转化最大权值匹配,只需将权值取相反数即可;
poj3565二分图最小权值匹配模板题目;
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<climits>
#include<cctype>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<string>
#define INF 1e15
#define eps 1e-6
#define MAX 1000
#define ll long long
using namespace std;
double w[MAX][MAX],Lx[MAX],Ly[MAX];
int Left[MAX],n;
bool S[MAX],T[MAX];
bool match(int i){
S[i] = true;
for (int j = 1; j<=n; j++) if (fabs(Lx[i] + Ly[j] - w[i][j]) <= eps && !T[j]){
T[j] = true;
if (!Left[j] || match(Left[j])){
Left[j] = i;
return true;
}
}
return false;
}
void update(){
double a = INF;
for (int i = 1; i<=n; i++) if (S[i])
for (int j = 1; j<=n; j++) if (!T[j])
a =