题目:奔小康赚大钱

KM算法深入理解:请戳这里

#include <stdio.h>
#include <string.h>
#define INF 99999999
#define N 350
int n,nx,ny;   //nx,ny分别表示x集合和y集合的元素个数
int lx[N];
int ly[N];
int link[N];
int slack[N];
int visx[N];
int visy[N];
int w[N][N];
bool DFS(int x)
{
int y;
visx[x]=1;
for(y=1;y<=ny;y++)
{
if(visy[y]) continue;
int t=lx[x]+ly[y]-w[x][y];
if(t==0)
{
visy[y]=1;
if(link[y]==-1||DFS(link[y]))
{
link[y]=x;
return true;
}
}
else if(slack[y]>t)         //不在相等子图中slack 取最小的
slack[y]=t;
}
return false;
}
int KM()
{
int i,j,x;
memset(link,-1,sizeof(link));
memset(ly,0,sizeof(ly));
for(i=1;i<=nx;i++)            //lx初始化为与它关联边中最大的
for(j=1,lx[i]=-INF;j<=ny;j++)
if(w[i][j]>lx[i])
lx[i]=w[i][j];
for(x=1;x<=nx;x++)
{
for(i=1;i<=ny;i++)
slack[i]=INF;
while(1)
{
memset(visx,0,sizeof(visx));
memset(visy,0,sizeof(visy));
if(DFS(x)) break;        //若成功(找到了增广轨),则该点增广完成,进入下一个点的增广
//若失败(没有找到增广轨),则需要改变一些点的标号,使得图中可行边的数量增加。
//方法为:将所有在增广轨中(就是在增广过程中遍历到)的X方点的标号全部减去一个常数d,
//所有在增广轨中的Y方点的标号全部加上一个常数d
int d=INF;
for(i=1;i<=ny;i++)
if(!visy[i]&&d>slack[i])
d=slack[i];
for(i=1;i<=nx;i++)
if(visx[i])
lx[i]-=d;
for(i=1;i<=ny;i++)      //修改顶标后,要把所有不在交错树中的Y顶点的slack值都减去d
{
if(visy[i]) ly[i]+=d;
else        slack[i]-=d;
}
}
}
int ans=0;
for(i=1;i<=ny;i++)
if(link[i]>-1)
ans+=w[link[i]][i];
return ans;
}
int main()
{
int i,j;
while(~scanf("%d",&n))
{
nx=ny=n;
memset(w,0,sizeof(w));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&w[i][j]);
int ans=KM();
printf("%d\n",ans);
}
return 0;
}

HDU2255(带权二分图的最大匹配)相关推荐

  1. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】带权二分图匹配 KM算法

    HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]最小费用最大流 In the kingdom of Henryy, there are N (2 <= N <= ...

  2. 带权二分图匹配(最小费用最大流) 8.2牛客暑期多校训练营五 E

    E.room | 时间限制:1 秒 | 内存限制:256M Nowcoder University has 4n students and n dormitories ( Four students ...

  3. Uvalive3353 Optimal Bus Route Design 带权二分图匹配

    题目描述:给出一个有向带权图,现在要求在图中找出若干个环,使得每个点恰好在一个环里,且所有环的距离之和最小,如果不能使每个点恰好在一个环里,输出"N". 思路: 将每个点u拆成u和 ...

  4. 【BZOJ4819】【SDOI2017】新生舞会(01分数规划,带权二分图匹配)

    Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间的 ...

  5. HDU 2255 奔小康赚大钱 带权二分图匹配 KM算法

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

  6. UVA1411 Ants(带权二分图的最大完美匹配、zkw费用流)

    题解 给定一些黑点白点,要求一个黑点链接一个白点并且线段不相交(转成二分图最大权匹配使用费用流解决)<训练指南>P351 输出方案:满流即为答案(满流是指这条路的流量跑满了,也就是说edg ...

  7. [NOI2012]美食节——费用流(带权二分图匹配)+动态加边

    题目描述 小M发现,美食节共有n种不同的菜品.每次点餐,每个同学可以选择其中的一个菜品.总共有m个厨师来制作这些菜品.当所有的同学点餐结束后,菜品的制作任务就会分配给每个厨师.然后每个厨师就会同时开始 ...

  8. 二分图大讲堂——彻底搞定最大匹配数(最小覆盖数)、最大独立数、最小路径覆盖、带权最优匹配

    二分图匹配 二分图大讲堂--彻底搞定最大匹配数(最小覆盖数).最大独立数.最小路径覆盖.带权最优匹配(转) 文本内容框架: §1图论点.边集和二分图的相关概念和性质 §2二分图最大匹配求解 匈牙利算法 ...

  9. KM算法--带权二分匹配

    http://acm.hdu.edu.cn/showproblem.php?pid=2255 问题概述:有n个人,n个房子,每个人对每个房子出价都不同,你是村长,你如何分配房子才能获得最高收益? 输入 ...

最新文章

  1. tensorflow model.compile() 示例
  2. SpringMVC处理MYSQL BLOB字段的上传
  3. MinGW 编译zlib libpng libjpeg等
  4. Android播放外部音乐文件
  5. 一等奖60万,首届“唱圆”杯AI翻译大赛报名中
  6. DOOM启世录的启示
  7. 社区护理 100404
  8. 为什么选择STM32-M3
  9. 我的新书,《第一行代码 Android 第3版》已出版!
  10. 批量采集抓取淘宝宝贝上传,采集商品软件
  11. MissionPlanner MP地面站添加三维地图支持
  12. java动效_前端实现炫酷动效_Lottie-前端实现AE动效
  13. 2022年山东省安全员A证特种作业证考试题库模拟考试平台操作
  14. discuz mysql cpu 100_Discuz导致MYSQL CPU 占用 100%?
  15. 小波学习笔记——MATLAB
  16. 上半年要写的博客文章30
  17. ​百度网盘批量转存分享增量更新软件工具助手
  18. [Ubuntu]MW150us-rtl8188eu 驱动编译安装
  19. 利用VS(Visual Studio)自带的工具查看dll/lib文件
  20. Git mvn 命令

热门文章

  1. Spring框架的前世今生以及对Spring的宏观认识
  2. hystrix服务降级
  3. hadoop的安装-配置文件修改
  4. ES6新特性之class类的基本语法
  5. kafka高可用集群原理
  6. 自定义注解事务课程回顾
  7. 扩展java.lang.Thread类
  8. Spring Security OAuth2源码解析(二)
  9. Spring Cloud异常
  10. basequickadapter详解_BaseRecyclerViewAdapter(持续更新!)