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, ...
随机推荐
- opsmanage 自动化运维管理平台
关闭防火墙.selinux 更换阿里云 yum源 依赖环境 yum install -y epel-releaseyum install vim net-tools nmon htop rsync t ...
- 【转】iOS 自动化性能采集
前言 对于iOS总体生态是比较封闭的,相比Android没有像adb这种可以查看内存.cpu的命令.在日常做性能测试,需要借助xcode中instruments查看内存.cpu等数据. 但是借助i ...
- TOJ4439微积分――曲线积分(数学,模拟)
传送门:点我 格林公式P,Q为关于x,y的函数. 现在为了方便起见,现给出x的积分上限1,积分下限0, y的积分上限x,积分下限0. P只是关于Y的函数,Q只是关于X的函数. 输入 开始输入为测试组数 ...
- Maximum Gap (ARRAY - SORT)
QUESTION Given an unsorted array, find the maximum difference between the successive elements in its ...
- Vue Baidu Map 插件的使用
最近在做一个项目,技术采用的是Vue.js套餐,有个百度地图的需求,当时,大脑宕机,立马去引入百度地图API,当时想到两种方法,一种是在index.html中全局引入js,此法吾不喜,就采用了第二种异 ...
- 微信小程序快速移植支付宝小程序
移植背景: 1. 支付宝小程序开发文档只了解了大致框架,跑了demo,具体Api.组件没太多了解: 2. 已有微信小程序,移植支付宝小程序做预研(主要针对授权登录.支付等功能). 3. 移植的微信小程 ...
- 写了一个兼容IE9的图片放大器(基于vue)
photoloupe 图片放大器 第一次写vue插件,本人比较喜欢用简单易懂的写法,不喜勿喷. 本插件支持IE9及以上版本,已经过验证. 本插件可根据需要设置放大倍数,最小支持1倍,支持小数 下载地址 ...
- 解决com.microsoft.sqlserver.jdbc.SQLServerException: 该连接已关闭
com.microsoft.sqlserver.jdbc.SQLServerException: 该连接已关闭. at com.microsoft.sqlserver.jdbc.SQLServerEx ...
- WIN7安装jdk1.7
@官网下载地址 我的64位的 下载后双击,一直下一步就行.出现下面这个关掉就行 新建环境变量 JAVA_HOME C:\Program Files\Java\jdk1.7.0_04 新建环境变量CLA ...
- [leetcode]114. Flatten Binary Tree to Linked List将二叉树展成一个链表
Given a binary tree, flatten it to a linked list in-place. For example, given the following tree: 1 ...