hdu 2255 奔小康赚大钱 KM算法
看到这么奇葩的题目名我笑了,后来这么一个裸的KM调了2小时我哭了……
这是个裸的KM算法,也没什么多说的,主要是注意多组数据时,每次都要把各种数组清空啊,赋值啊什么的,反正比较麻烦。至于为什么调了2小时,在修改标号的时候我修改的是vx和vy……
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #define N 310 5 #define inf 0xff 6 int a[N][N]={0},n,px[N],py[N],vx[N],vy[N],str[N],fa[N]; 7 int find(int now) 8 { 9 int i; 10 if (now==0) 11 return 1; 12 vx[now]=1; 13 for (i=1;i<=n;i++) 14 if (a[now][i]==px[now]+py[i]&&!vy[i]) 15 { 16 vy[i]=1; 17 if (fa[i]==0||find(fa[i])) 18 { 19 fa[i]=now; 20 return 1; 21 } 22 } 23 else 24 if (px[now]+py[i]-a[now][i]<str[i]) 25 str[i]=px[now]+py[i]-a[now][i]; 26 return 0; 27 } 28 int KM() 29 { 30 int i,j,k,x,y,z; 31 for (i=1;i<=n;i++) 32 { 33 for (j=1;j<=n;j++) 34 str[j]=inf; 35 while (1) 36 { 37 memset(vx,0,sizeof(vx)); 38 memset(vy,0,sizeof(vy)); 39 if (find(i)) 40 break; 41 k=inf; 42 for (x=1;x<=n;x++) 43 if (!vy[x]&&k>str[x]) 44 k=str[x]; 45 for (x=1;x<=n;x++) 46 { 47 if (vx[x]) 48 px[x]-=k; 49 if (vy[x]) 50 py[x]+=k; 51 else 52 str[x]-=k; 53 } 54 } 55 } 56 z=0; 57 for (i=1;i<=n;i++) 58 z+=a[fa[i]][i]; 59 return z; 60 } 61 int main() 62 { 63 int i,j,k,x,y,z; 64 while(scanf("%d",&n)!=EOF) 65 { 66 memset(px,0,sizeof(px)); 67 memset(py,0,sizeof(py)); 68 memset(fa,0,sizeof(fa)); 69 for (i=1;i<=n;i++) 70 for (j=1;j<=n;j++) 71 { 72 scanf("%d",&x); 73 a[i][j]=x; 74 if (x>px[i]) 75 px[i]=x; 76 } 77 printf("%d\n",KM()); 78 } 79 }
转载于:https://www.cnblogs.com/handsomeJian/p/3575275.html
hdu 2255 奔小康赚大钱 KM算法相关推荐
- hdu 2255 奔小康赚大钱--KM算法模板
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...
- 二分图最大权匹配问题KM算法讲解 HDU 2255 奔小康赚大钱
作者:logosG 链接:https://www.cnblogs.com/logosG/p/logos.html (讲解的KM算法,特别厉害!!!) KM算法: 现在我们来考虑另外一个问题:如果每个员 ...
- KM算法 最优匹配(最大权匹配) hdu 2255 奔小康赚大钱 最小权匹配 poj 2195 Going Home
最大权二分匹配问题就是给二分图的每条边一个权值,选择若干不相交的边,得到的总权值最大.解决这个问题可以用KM算法.理解KM算法需要首先理解"可行顶标"的概念.可行顶标是指关于二分图 ...
- HDU 2255 奔小康赚大钱 带权二分图匹配 KM算法
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU - 2255 奔小康赚大钱(二分图最大权匹配+KM)
题目链接:点击查看 题目大意:中文题目,简单来说就是n个人和n个房子最大匹配,需要一一对应并且满足权值和最大 题目分析:二分图的完备匹配,条件完全符合KM算法的局限性,直接套模板即可,后续学习费用流( ...
- HDUOJ 2255 奔小康赚大钱
HDUOJ 2255 奔小康赚大钱 题目链接 Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住 ...
- 二分图最佳匹配 KM算法 Hdu2255奔小康赚大钱 + Poj 3565 Ants
2014-10-4 更新 在最下面增加了基于邻接表的模板 理论:http://blog.sina.com.cn/s/blog_691ce2b701016reh.html http://philosci ...
- 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDUOJ---------2255奔小康赚大钱
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
最新文章
- 关于oracle的基础增删改查操作总结
- SVO学习笔记(二)
- 汇编语言w3c_w3cschoolc语言教程
- 网络工程师必须具备的素质
- 60进制时间计算器_不止加减乘除,Windows 自带计算器还有这些隐藏技巧
- Shell排序的原理与集体实现
- 025_JavaScript数组方法
- grep查询不到中文 或 Binary file xx matches
- UI复习练习_优酷布局
- 公司因为薪资问题,走了一个各方面都不错的老工人,花更多的钱招来一个跨行业新手,这是为什么?
- vue.js实现自定义输入分页
- C# XElement
- mysql 高级查询总结_MySQL高级查询
- 安装net framework3.5提示需要.net framework3.5,错误代码0x800f081f
- 《FLUENT 14.0超级学习手册》—— 导读
- DB9标准的公头\母头接线定义
- 软件测试技术——安全性测试
- 书荒季 | “超长待机”的假期,收好这份信息安全书单!
- Not showing null elements
- 关于excle表格中日期时间筛选
热门文章
- Paros工具使用操作手册
- Selenium select-下拉列表处理
- c++ map用法_5分钟掌握Python | Map、Reduce和Filter如何运用?
- 关于地图制图大赛的8点说明,附地图学习资源
- graphics | R语言的基础绘图系统(二)—— 绘图参数及par函数
- sf | 判断点线面等几何对象的空间位置关系
- android 判断fragment类型,Android 判断当前Fragment是否可见(Visible)
- 如何添加二级标题_怎样给Word文档添加目录?
- java程序设计自考_java程序设计自考试题
- 2017计算机湖北对口试题答案,2017年计算机专业对口考试试卷及答案