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. hiho1509 异或排序

    题目链接 题目大意: 给定一个长度为 n 的非负整数序列 a[1..n] 你需要求有多少个非负整数 S 满足以下两个条件: (1).0 ≤ S < 260 (2).对于所有 1 ≤ i < ...

  2. 【Java】新建的web项目的jsp页面报错的解决方法

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

  3. 优动漫PAINT-绘制透明布料教程

    原是一篇日语教程,觉得挺不错的,就劳烦会日语的朋友帮忙翻译了,特此分享!希望可以帮助到大家在绘画上的学习!原教程转载优动漫官网. 作者:JaneMere 相关资讯还可以关注www.dongmansof ...

  4. ajax错误信息

    XMLHttpRequest.status状态码 1xx-信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应. 100-继续. 101-切换协议. 2xx- ...

  5. angular7升级到angular8

    1.首先我们对:angular的命令的安装 ng install -g @angular/cli的安装则会升级到最新的版本,并且再次创建项目的时候,我们就能够使用ng version查看到已经是最新的 ...

  6. luogu P1630 求和(枚举暴力)

    题意 题解 可以发现当a=10001时, 和1是等价的. 所以这题就水了. #include<iostream> #include<cstring> #include<c ...

  7. 学习CV:《OpenCV 3计算机视觉Python语言实现第2版》中文PDF+英文PDF+代码

    理解与计算机视觉相关的算法.模型以及OpenCV 3 API背后的基本概念,有助于开发现实世界中的各种应用程序(比如:安全和监视领域的工具). OpenCV 3是一种先进的计算机视觉库,可以用于各种图 ...

  8. mac同时享受教育优惠和免手续费分期

    神奇地址:工商银行  http://store.apple.com/cn_icbc_edu招商银行  http://store.apple.com/cn_cmb_edu农业银行  http://sto ...

  9. 个人创业了,做了个网站和App,www.91tianwu.com

    大家好! 很久没有写文章了,响应党和政府号召,创业了.此文为了推广我的网站而写,希望有兴趣的看看. 我做了添物网,地址:http://www.91tianwu.com. 主要做购物导航推荐,目前集中在 ...

  10. cocos2d_android 第一个游戏

    依据上一篇文章.创建好cocos2d--android的开发环境 先上效果图 实现该效果的代码: package com.cn.firstgame; import org.cocos2d.layers ...