KM最大匹配 HDU 2255
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的更多相关文章
- 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 2255 奔小康赚大钱(带权二分图最大匹配)
HDU 2255 奔小康赚大钱(带权二分图最大匹配) Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊 ...
- 二分图最大权匹配问题&&KM算法讲解 && HDU 2255 奔小康赚大钱
作者:logosG 链接:https://www.cnblogs.com/logosG/p/logos.html (讲解的KM算法,特别厉害!!!) KM算法: 现在我们来考虑另外一个问题:如果每个员 ...
- hdu 2255 奔小康赚大钱--KM算法模板
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...
- HDU 3523 Image copy detection(KM最大匹配)
HDU 3523 Image copy detection 题目链接 题意:这题事实上题意读懂就简单了,说白了就是1-n放到1-n列,每列的值为每列上数字和该数字的差的绝对值,然后求总和最小 思路:就 ...
- HDU 2255 奔小康赚大钱 (KM算法 模板题)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 2255 ——奔小康赚大钱——————【KM算法裸题】
奔小康赚大钱 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- HDU 3718 Similarity(KM最大匹配)
HDU 3718 Similarity 题目链接 题意:给定一个标准答案字符串,然后以下每一行给一个串.要求把字符一种相应一种,要求匹配尽量多 思路:显然的KM最大匹配问题,位置相应的字符连边权值+1 ...
- HDU - 2255 奔小康赚大钱 KM算法 模板题
HDU - 2255 题意: 分配n所房子给n个家庭,不同家庭对一所房子所需缴纳的钱是不一样的,问你应当怎么分配房子,使得最后收到的钱最多. 思路: KM算法裸题.上模板 #include <i ...
随机推荐
- 4----COM:a Generative Model for group recommendation(组推荐的一种生成模型)
1.摘要: 组推荐的一个挑战性问题:因为不同组的成员就有不同的偏好,如何平衡这些组员的偏好是一个难以解决的问题. 在本文中,作者提出了一个COM的概率模型来建立组活动生成过程. 直觉上: 一个组中的用 ...
- Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
解决方法: 1.进入启动文件目录 2.将用户加入到docker 组 sudo gpasswd -a ${USER} docker 3.使用root用户 sudo su 4. 切换当前用户 su ${ ...
- linux下安装jdk跟tomcat
文章参考 https://www.cnblogs.com/geekdc/p/5607100.html Linux服务器安装jdk+tomcat https://baijiahao.baidu ...
- Vue组件通信之Bus
关于组件通信我相信小伙伴们肯定也都很熟悉,就不多说了,对组件通信还不熟悉的小伙伴移步这里. 在vue2.0中 $dispatch 和 $broadcast 已经被弃用.官方文档中给出的解释是: 因为基 ...
- 《Craking the Coding interview》python实现---01
###题目:给定一个字符串,判断其中是否有重复字母###思路:将重复的字符放入到list中,并进行计数统计###实现:伪代码.函数.类实现###伪代码:string=s #给定的字符串list=[] ...
- WPF 内存释放
原文:WPF 内存释放 在WPF 项目中引用到Transitionals 实现图片转场特效,发现每次图片转场内存都会增加,在每次转场后进行内存压缩 记录 解决方案如下: GC.Collect(); G ...
- HTTP——学习笔记(8)
HTTP中的一些协议内容会限制某些网站的功能使用 比如,Facebook这类的社交网站,需要实时地观察到海量用户公开发布的内容,而HTTP中的以下标准就会成为瓶颈: 一条连接上只可发送一个请求 请求只 ...
- springMVC 配置jdbcTemplate连接Oracle数据库出错
springMVC 配置jdbcTemplate连接Oracle数据库出错 错误信息: log4j:WARN No appenders could be found for logger (org.s ...
- Gradle学习之自己定义属性
请通过下面方式下载本系列文章的Github演示样例代码: git clone https://github.com/davenkin/gradle-learning.git 在前面的文章中我们 ...
- Android ListView动画实现方法
在Android中listview是最经常使用的控件之中的一个,可是有时候我们会认为千篇一律的listview看起来过于单调,于是就产生了listView动画,listview载入了动画会让用户体验更 ...