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. 【Java】新建的web项目的jsp页面报错的解决方法

    一.错误信息 当用Eclipse新建web项目后,在里面建个jsp页面可能出现如下图的错误,jsp文件有一个红叉: 主要原因是:依赖tomcat类库 解决方案:项目右击—>build path ...

  2. python中的json

    import json# dumps #一般处理字符串# dump #一般处理文件 #字符串和json之间的转换test_dict={"name":"fxh", ...

  3. python 之 MRO 异常

    今天突然遇到这个异常,先贴两个地址,待有时间写博客 https://www.jianshu.com/p/fea6e0a0cc14 https://makina-corpus.com/blog/meti ...

  4. NOIp模拟赛二十九

    又是受虐的一天呢~接下来四天都要打模拟赛QAQ 今日分数:0(100)+100+0=100 A题O(读入)结论题判断结果时没return 0被subtask卡成0分,喜提fstQAQ,B题DP,C题不 ...

  5. BZOJ 1444 [JSOI2009]有趣的游戏 (Trie图/AC自动机+矩阵求逆)

    题目大意:给你$N$个长度相等且互不相同的模式串,现在有一个字符串生成器会不断生成字符,其中每个字符出现的概率是$p_{i}/q_{i}$,当生成器生成的字符串包含了某个模式串,则拥有该模式串的玩家胜 ...

  6. nginx proxy_set_header设置,自定义header

    在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断,或者统计ip访问次数等,通常情况下我们使用request.getRemoteAddr()就可以获取到客户端ip,但是当我们使用了ng ...

  7. PatentTips - Method for network interface sharing among multiple virtual machines

    BACKGROUND Many computing systems include a network interface card (NIC) to provide for communicatio ...

  8. 主程的晋升攻略(4):TCP、消息分包和协议设计

    在<主程的晋升攻略(3):IP.DNS和CDN>中,一次网络请求经过DNS解析知道了目的IP,如今就要发出网络包,这里我们说一说TCP的相关话题. TCP是一种流式协议 讲网络编程的教科书 ...

  9. mongodb官网文档阅读笔记:与写性能相关的几个因素

    Indexes 和全部db一样,索引肯定都会引起写性能的下降,mongodb也没啥特别的,相对索引对读性能的提示,这些消耗通常是能够接受的,所以该加入的索引还是要加入.当然须要慎重一些.扯点远的,以前 ...

  10. LeakCanary:简单粗暴的内存泄漏检測工具

    差点儿每一个程序猿在开发的过程中都会遇到内存泄漏.那么我们怎样检測到app是否哪里出现内存泄漏呢?square公司推出了一款简单粗暴的检測内存泄漏的工具-- LeakCanary 什么是内存泄漏? 内 ...