KM算法详解+模板 - wenr - 博客园  http://www.cnblogs.com/wenruo/p/5264235.html

 #include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; #define MAXN 305
#define inf 65553566
int love[MAXN][MAXN]; /// 记录每个妹子和每个男生的好感度
int ex_girl[MAXN]; /// 每个妹子的期望值
int ex_boy[MAXN]; /// 每个男生的期望值
bool vis_girl[MAXN]; /// 记录每一轮匹配匹配过的女生
bool vis_boy[MAXN]; /// 记录每一轮匹配匹配过的男生
int match[MAXN]; /// 记录每个男生匹配到的妹子 如果没有则为-1
int slack[MAXN]; /// 记录每个汉子如果能被妹子倾心最少还需要多少期望值 int n,sum; ///为女孩找匹配的男孩
int find(int girl)
{
vis_girl[girl]=;
for(int boy=;boy<=n;boy++)
{
if(vis_boy[boy]) continue;///如果男孩已经被标记过,则找下一个
int gap=ex_girl[girl]+ex_boy[boy]-love[girl][boy];///看差距
if(gap==)
{
vis_boy[boy]=;
if(match[boy]==-||find(match[boy]))///如果男孩未匹配过或者该男孩的妹子可以找其他人
{
match[boy]=girl;///将女孩匹配给男
return ;
}
}
else
{
slack[boy]=min(slack[boy],gap);
}
}
return ;
}
void KM()
{
memset(match,-,sizeof(match));
memset(ex_boy,,sizeof(ex_boy)); ///每个女生的初始期望值是与他相连的男生最大的好感度
for(int i=;i<=n;i++)
{
ex_girl[i]=love[i][];
for(int j=;j<=n;j++)
{
ex_girl[i]=max(ex_girl[i],love[i][j]);
}
}
///尝试为每个女孩匹配男孩
for(int i=;i<=n;i++)
{
fill(slack+,slack+n+,inf);
while()
{ /// 为每个女生解决归宿问题的方法是 :如果找不到就降低期望值,直到找到为止
///记录每轮匹配中南海女孩是否被尝试匹配过
memset(vis_girl,,sizeof(vis_girl));
memset(vis_boy,,sizeof(vis_boy));
if(find(i)) break;///如果发现该女孩已经找到归宿,就进行下一个女孩
int d=inf;
for(int j=;j<=n;j++)
if(!vis_boy[j])///看该男孩如果没有匹配的,就将最小的期望值给他
d=min(d,slack[j]); for(int j=;j<=n;j++)
{
if(vis_girl[j])///如果女孩已经匹配,则女孩的期望值减去
ex_girl[j]-=d;
if(vis_boy[j])
ex_boy[j]+=d;
}
}
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
sum=;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
scanf("%d",&love[i][j]);
}
KM();
for(int i=;i<=n;i++)
{
sum+=love[match[i]][i];
}
printf("%d\n",sum);
} }

KM最大匹配 HDU 2255的更多相关文章

  1. 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  2. HDU 2255 奔小康赚大钱(带权二分图最大匹配)

    HDU 2255 奔小康赚大钱(带权二分图最大匹配) Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊 ...

  3. 二分图最大权匹配问题&&KM算法讲解 && HDU 2255 奔小康赚大钱

    作者:logosG 链接:https://www.cnblogs.com/logosG/p/logos.html (讲解的KM算法,特别厉害!!!) KM算法: 现在我们来考虑另外一个问题:如果每个员 ...

  4. hdu 2255 奔小康赚大钱--KM算法模板

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...

  5. HDU 3523 Image copy detection(KM最大匹配)

    HDU 3523 Image copy detection 题目链接 题意:这题事实上题意读懂就简单了,说白了就是1-n放到1-n列,每列的值为每列上数字和该数字的差的绝对值,然后求总和最小 思路:就 ...

  6. HDU 2255 奔小康赚大钱 (KM算法 模板题)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  7. HDU 2255 ——奔小康赚大钱——————【KM算法裸题】

    奔小康赚大钱 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  8. HDU 3718 Similarity(KM最大匹配)

    HDU 3718 Similarity 题目链接 题意:给定一个标准答案字符串,然后以下每一行给一个串.要求把字符一种相应一种,要求匹配尽量多 思路:显然的KM最大匹配问题,位置相应的字符连边权值+1 ...

  9. HDU - 2255 奔小康赚大钱 KM算法 模板题

    HDU - 2255 题意: 分配n所房子给n个家庭,不同家庭对一所房子所需缴纳的钱是不一样的,问你应当怎么分配房子,使得最后收到的钱最多. 思路: KM算法裸题.上模板 #include <i ...

随机推荐

  1. 虚拟机创建后该如何获取IP地址并访问互联网实用教程

    之前在做项目的时候主机IP地址.网关.DNS.子网掩码等都是公司或者对方直接给提供的,但是如果我们自己想搭建一台虚拟机或者一台集群的话,手头又没有IP地址,该肿么办呢?   白慌,这里介绍一个小技巧, ...

  2. POJ-1062 昂贵的聘礼 有限制的最短路

    题目链接:https://cn.vjudge.net/problem/POJ-1062 题意 虽然是中文题,还是简单复述一下吧 我们想要酋长的女儿作为老婆.作为交换,酋长想要点钱. 酋长提出可以用其他 ...

  3. python学习(二):基本数据类型:整型,字符型

    整型: type():显示数据类型 # 整型,int # python3里,不管数字有多大,都是int类型 # python2里,有大小区分,长整型:long int a = " print ...

  4. 魔兽争霸RPG游戏-军团战争-游戏经验总结

    终于要写这篇了,上一篇是个意外. 2015年关注,一代鬼王Xun和GGL比赛.晚上11点之后,经常有水友赛.主播xun,会带着一帮小弟,玩一些游戏.比如魔兽争霸6v6,2v2,RPG游戏-军团战争,疯 ...

  5. 【Henu ACM Round#24 D】Iterated Linear Function

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把B提取出来就是一个等比数列了. 求和一下会发现是这种形式. \(B*\frac{(A^n-1)}{A-1}+A^n*x\) 则求一 ...

  6. IIS Express加入MIME映射

    近期在用Grid Report做Web报表的时候,碰到一件非常挠头的事. 本地用VS2010写的代码,调试的时候Web报表无法显示,用24.248server上VS2013相同仍是无法显示.最后把项目 ...

  7. legend---九、js的核心是什么

    legend---九.js的核心是什么 一.总结 一句话总结:js里面一切东西都是对象,包括数组,字符串,所以你就知道数组啊,对象啊,的很多东西怎么用了 1.js如何合并两个数组? concat,ar ...

  8. BZOJ 1379 模拟退火

    模拟退火的第一题~ //By SiriusRen #include <cmath> #include <cstdio> #include <algorithm> u ...

  9. View的双击动作

    有时在android中需要为某一控件设置双击监听,实现也挺简单,自己动手吧.编码永远不是问题,思路才是最重要. public class DoubleClickDemo extends Activit ...

  10. PostgreSQL Replication之第四章 设置异步复制(5)

    4.5 使流复制更健壮 当连接到master时,slave要做的第一件事情是赶上master.但是,这会一直工作吗?我们已经看到,我们可以使用由基于流和基于文件组成的混合设置.这给了我们一些额外的安全 ...