KM匹配板子
/* gyt
Live up to every day */
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<cstring>
#include<queue>
#include<set>
#include<string>
#include<map>
#include <time.h>
#define PI acos(-1)
using namespace std;
typedef long long ll;
typedef double db;
const int maxn = ;
const ll maxm = 1e7;
const int mod = 1e9+;
const int INF = 0x3f3f3f;
const ll inf = 1e14 + ;
const db eps = 1e-;
const ll Max=1e19;
int mapp[maxn][maxn], visx[maxn], visy[maxn];
int lx[maxn], ly[maxn];
int match[maxn];
int n; int hungry(int u) {
visx[u] = true;
for(int i = ; i < n; ++i)
{
if(!visy[i] && lx[u] + ly[i] == mapp[u][i])
{
visy[i] = true;
if(match[i] == - || hungry(match[i]))
{
match[i] = u;
return true;
}
}
}
return false;
}
void KM() {
int temp;
memset(lx, , sizeof(lx)); //初始化顶标
memset(ly, , sizeof(ly)); //ly[i]为0
for(int i = ; i < n; ++i) //lx[i]为权值最大的边
for(int j = ; j < n; ++j)
lx[i] = max(lx[i], mapp[i][j]);
for(int i = ; i < n; ++i) //对n个点匹配
{
while()
{
memset(visx, false, sizeof(visx));
memset(visy, false, sizeof(visy));
if(hungry(i)) //匹配成功
break;
else //匹配失败,找最小值
{
temp = INF;
for(int j = ; j < n; ++j) //x在交错树中
if(visx[j])
for(int k = ; k < n; ++k) //y在交错树外
if(!visy[k] && temp > lx[j] + ly[k] - mapp[j][k])
temp = lx[j] + ly[k] - mapp[j][k];
for(int j = ; j < n; ++j) //更新顶标
{
if(visx[j])
lx[j] -= temp;
if(visy[j])
ly[j] += temp;
}
}
}
}
}
void solve() {
int ans;
while(scanf("%d", &n) != EOF)
{
ans = ;
memset(match, -, sizeof(match));
for(int i = ; i < n; i++)
for(int j = ; j < n; j++)
scanf("%d", &mapp[i][j]);
KM();
for(int i = ; i < n; i++) //权值相加
ans += mapp[match[i]][i];
printf("%d\n", ans);
}
}
int main() {
int t=;
//freopen("in.txt", "r", stdin);
//scanf("%d", &t); while(t--)
solve();
}
KM匹配板子的更多相关文章
- 【转】KM匹配题集
转自:http://blog.csdn.net/shahdza/article/details/7779324 [HDU]2255 奔小康赚大钱 模板题★1533 Going Home 模板题★242 ...
- HDU5740 Glorious Brilliance【最短路 KM匹配】
HDU5740 Glorious Brilliance 题意: 给出一张不一定合法的染色图,每次可以交换相邻两点的颜色,问最少多少次能使染色图合法 合法的染色图相邻点的颜色不能相同 题解: 首先要确定 ...
- hdu_2255_奔小康赚大钱(KM带权二分匹配板子)
题目连接:hdu_2255_奔小康赚大钱 存个板子 /* 其实在求最大 最小的时候只要用一个模板就行了, 把边的权值去相反数即可得到另外一个.求结果的时候再去 相反数即可,最大最小有一些地方不同.. ...
- Assignment HDU - 2853(二分图匹配 KM 新边旧边)
传送门: Assignment HDU - 2853 题意:题意直接那松神的题意了.给了你n个公司和m个任务,然后给你了每个公司处理每个任务的效率.然后他已经给你了每个公司的分配方案,让你求出最多能增 ...
- POJ 2516 Minimum Cost (KM最优匹配)
题意:有N家家店,每家店都对K种货物有需求:同时有M家仓库,对K钟货物有供应.对于每种货物,每个仓库送至每家店都有自己的单位费用.求满足所有店所有货物的最小费用 分析:对于每一种货物,如果总需求大于总 ...
- HDU 2255.奔小康赚大钱 最大权匹配
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- UOJ80 二分图最大权匹配
草,学了一下午假板子,sb博客害人 题目大意: 一个教室有\(n\)个男生和\(m\)个女生,某些男女之间愿意早恋(雾),其早恋好感度为\(w_i\),问怎样让男女配对使得班里好感度之和最大 \(n\ ...
- 【HDU 2853】 KM算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 题意:有n个公司,m个任务,每个公司做每个任务都有一个效率值,最开始每个公司都指派了一个任务,现 ...
- 【HDU 2853】Assignment (KM)
Assignment Problem Description Last year a terrible earthquake attacked Sichuan province. About 300, ...
随机推荐
- vs中更改项目名称注意事项
1,项目属性中的所有需要改的地方,还有程序集名称. 2,解决方案用记事本打开更改启动路径. 3,重新加载即可.
- jenkins权限控制
一.插件安装 插件:Role-based Authorization Strategy版本:2.3.2 二.全局安全配置 进入Jenkins后点击系统管理进入全局安全配置 当插件安装好的时候,授权策略 ...
- python之语音识别(speech模块)
1.原理 语音操控分为 语音识别和语音朗读两部分. 这两部分本来是需要自然语言处理技能相关知识以及一系列极其复杂的算法才能搞定,可是这篇文章将会跳过此处,如果你只是对算法和自然语言学感兴趣的话,就只有 ...
- js改变表单的内容样式
一.改变单个样式 var obj = document.getElementById("id"); obj.style.cssText = " display: ...
- 今天清理C盘空间,发现Unity的一个问题
C:\Users\Acer\AppData\LocalLow\Unity\Caches\GiCache AppData目录下,Unity占用了大量C盘空间,大概有5,6个G
- 一个先进的App框架:使用Ionic创建一个简单的APP
原文 http://www.w3cplus.com/mobile/building-simple-app-using-ionic-advanced-html5-mobile-app-framewor ...
- TZOJ 2018 SPF(连通图割点和分成的连通块)
描述 Consider the two networks shown below. Assuming that data moves around these networks only betwee ...
- [剑指Offer]39-数组中出现次数超过一半的数字(快排延申,找第k大数同理)
题目链接 https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163?tpId=13&tqId=11181&t ...
- Linux日志文件分割
经常有这样的情况,日志文件或者数据文件会变得很庞大,那么每次对这些目标文件的访问或者修改就会变得极其耗时.因而引发一些性能问题,但是如果对这些目标文件进行分割,限定其大小,那么每次的访问或者修改就会变 ...
- Js学习(1)基本语法
变量: 用var声明变量,如果只是声明变量而不赋值,则变量的值是undefined,表示无定义 不写·var也有效,但不建议 变量声明两次无效,但第二次声明时赋值会覆盖掉前面的值 变量提升: Js引擎 ...