题目链接

n个花, m个花瓶, 每个花放到一个花瓶里会产生一个值w[i][j], 一个花只能放到一个花瓶里, 一个花瓶只能放一个花, 求产生的最大值。

带权二分图模板。

#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <bitset>
using namespace std;
#define pb(x) push_back(x)
#define ll long long
#define mk(x, y) make_pair(x, y)
#define lson l, m, rt<<1
#define mem(a) memset(a, 0, sizeof(a))
#define rson m+1, r, rt<<1|1
#define mem1(a) memset(a, -1, sizeof(a))
#define mem2(a) memset(a, 0x3f, sizeof(a))
#define rep(i, n, a) for(int i = a; i<n; i++)
#define fi first
#define se second
typedef pair<int, int> pll;
const double PI = acos(-1.0);
const double eps = 1e-;
const int mod = 1e9+;
const int inf = ;
const int dir[][] = { {-, }, {, }, {, -}, {, } };
const int M = ;
bool sx[M], sy[M];
int match[M], w[M][M], n, m, d, lx[M], ly[M];
void init ()
{
memset (w, , sizeof(w));
}
bool dfs (int u)
{
int v; sx[u] = true;
for (v = ; v < m; v++)
{
if (!sy[v] && lx[u]+ly[v]==w[u][v])
{
sy[v] = true;
if (match[v] == - || dfs (match[v]))
{
match[v] = u;
return true;
}
}
}
return false;
} int KM ()
{
int i, j, k, sum = ;
memset (ly, , sizeof(ly));
for (i = ; i < n; i++)
{
lx[i] = -inf;
for (j = ; j < m; j++)
if (lx[i] < w[i][j])
lx[i] = w[i][j];
}
memset (match, -, sizeof(match));
for (i = ; i < n; i++)
{
while ()
{
memset (sx, false, sizeof(sx));
memset (sy, false, sizeof(sy));
if (dfs (i))
break;
d = inf;
for (j = ; j < n; j++)
if (sx[j])
for (k = ; k < m; k++)
if (!sy[k])
d = min (d, lx[j]+ly[k]-w[j][k]);
if (d == inf)
return -;
for (j = ; j < n; j++)
if (sx[j])
lx[j] -= d;
for (j = ; j < m; j++)
if (sy[j])
ly[j] += d;
}
}
for (i = ; i < m; i++)
if (match[i] > -)
sum += w[match[i]][i];
return sum;
}
int main()
{
cin>>n>>m;
for(int i = ; i<n; i++) {
for(int j = ; j<m; j++) {
scanf("%d", &w[i][j]);
}
}
int ans = KM();
cout<<ans<<endl;
return ;
}

最新文章

  1. 学习下nginx负载均衡--深入理解nginx
  2. shell变量赋值 不能有空格的原因
  3. .Net验证码实现基础--Draw
  4. 就Double、Decimal来说数据计算异常
  5. .NET开源工作流RoadFlow-流程设计-流程步骤设置-按钮设置
  6. HDU 1394Minimum Inversion Number(线段树)
  7. yii2-admin 插件使用简要教程
  8. Qt... configure: error: Qt (&gt;= Qt 2.2.2) (headers…
  9. Umbraco学习2------数据类型
  10. 如何自学 Python(干货合集)
  11. Python第一天接触心得
  12. 搭建Hadoop完全分布式
  13. 从壹开始 [ Nuxt.js ] 之一 || 为开源收录Bug之 TiBug项目 开篇讲
  14. 前端加密传输 crypto-js AES 加密和解密
  15. Spark面试题
  16. Windows----Github环境搭建
  17. tofile和fromfile数组内建函数
  18. RNN,LSTM,GRU简单图解:
  19. shell利用数组分割组合字符串
  20. centos7配置vsftpd

热门文章

  1. [iOS]手把手教你实现微信小视频
  2. Editplus配置java运行环境
  3. Qt 圆角矩形+鼠标左键拖动窗口
  4. Swift 基本数据类型
  5. Linux网络管理——DNS作用
  6. 如何正确理解正则表达式中的分隔符 \b
  7. jquery的$().each,$.each的区别与应用
  8. lua学习笔记1
  9. 让vs2010的html编辑器验证html5语法
  10. 【Windows 8 Store App】学习:目录