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, ...
随机推荐
- 179. Largest Number(INT, String)
Given a list of non negative integers, arrange them such that they form the largest number. For exam ...
- Python+Selenium学习--窗口切换及操作元素
场景 有时候我们在测试一个web 应用时会出现多个浏览器窗口的情况,在selenium1.0 中这个问题比较难处理.webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的 ...
- glove
glove - 必应词典 美[ɡlʌv]英[ɡlʌv] v.给戴手套:作…的手套 n.(分手指的)手套 网络分指手套:拳套:棒球之爱 变形复数:gloves:现在分词:gloving:过去分词:glo ...
- Anaconda常用命令大全
使用conda 首先我们将要确认你已经安装好了conda 配置环境 下一步我们将通过创建几个环境来展示conda的环境管理功能.使你更加轻松的了解关于环境的一切.我们将学习如何确认你在哪个环境中,以及 ...
- 【centos】centos安装g++
gcc在Centos下的安装:使用的是以下语句:yum install gcc 以为安装g++,类似的应该使用:yum install g++ 可是提示:command is not found 查询 ...
- 微信小程序中用setData修改一个对象的属性值
原创文章 1. Page({ data: { items:{ //items为一个对象,is_like和like分别为其两个属性 is_like: 0, like: 0 ...
- 函数的有用信息,装饰器 day12
一 函数的有用信息 本函数的功能:绘图功能,实时接收数据并绘图.:return: 绘图需要的数据,返回给前端某标签 def f1(): ''' 本函数的功能:绘图功能,实时接收数据并绘图. :retu ...
- 使用DirectX作渲染过程
1. 首先知道渲染代码放置位置.渲染代码放在WinMain消息循环中 while(msg.message!=WM_QUIT) { if(PeekMessage(****) { TranslateMes ...
- C# devexpress gridcontrol 分页 控件制作
这个小小的功能实现起来还是有一点点复杂, 分页单独一个usercontrol 出来,导致查询换页 与gridcontrol页面分离, 一般通过换页事件通知girdcontrol 做出查询 查询来说有 ...
- 5J - 复习时间
为了能过个好年,xhd开始复习了,于是每天晚上背着书往教室跑.xhd复习有个习惯,在复习完一门课后,他总是挑一门更简单的课进行复习,而他复习这门课的效率为两门课的难度差的平方,而复习第一门课的效率为1 ...