看到这么奇葩的题目名我笑了,后来这么一个裸的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算法相关推荐

  1. hdu 2255 奔小康赚大钱--KM算法模板

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...

  2. 二分图最大权匹配问题KM算法讲解 HDU 2255 奔小康赚大钱

    作者:logosG 链接:https://www.cnblogs.com/logosG/p/logos.html (讲解的KM算法,特别厉害!!!) KM算法: 现在我们来考虑另外一个问题:如果每个员 ...

  3. KM算法 最优匹配(最大权匹配) hdu 2255 奔小康赚大钱 最小权匹配 poj 2195 Going Home

    最大权二分匹配问题就是给二分图的每条边一个权值,选择若干不相交的边,得到的总权值最大.解决这个问题可以用KM算法.理解KM算法需要首先理解"可行顶标"的概念.可行顶标是指关于二分图 ...

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

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

  5. HDU - 2255 奔小康赚大钱(二分图最大权匹配+KM)

    题目链接:点击查看 题目大意:中文题目,简单来说就是n个人和n个房子最大匹配,需要一一对应并且满足权值和最大 题目分析:二分图的完备匹配,条件完全符合KM算法的局限性,直接套模板即可,后续学习费用流( ...

  6. HDUOJ 2255 奔小康赚大钱

    HDUOJ 2255 奔小康赚大钱 题目链接 Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住 ...

  7. 二分图最佳匹配 KM算法 Hdu2255奔小康赚大钱 + Poj 3565 Ants

    2014-10-4 更新 在最下面增加了基于邻接表的模板 理论:http://blog.sina.com.cn/s/blog_691ce2b701016reh.html http://philosci ...

  8. 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)

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

  9. HDUOJ---------2255奔小康赚大钱

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

最新文章

  1. 关于oracle的基础增删改查操作总结
  2. SVO学习笔记(二)
  3. 汇编语言w3c_w3cschoolc语言教程
  4. 网络工程师必须具备的素质
  5. 60进制时间计算器_不止加减乘除,Windows 自带计算器还有这些隐藏技巧
  6. Shell排序的原理与集体实现
  7. 025_JavaScript数组方法
  8. grep查询不到中文 或 Binary file xx matches
  9. UI复习练习_优酷布局
  10. 公司因为薪资问题,走了一个各方面都不错的老工人,花更多的钱招来一个跨行业新手,这是为什么?
  11. vue.js实现自定义输入分页
  12. C# XElement
  13. mysql 高级查询总结_MySQL高级查询
  14. 安装net framework3.5提示需要.net framework3.5,错误代码0x800f081f
  15. 《FLUENT 14.0超级学习手册》—— 导读
  16. DB9标准的公头\母头接线定义
  17. 软件测试技术——安全性测试
  18. 书荒季 | “超长待机”的假期,收好这份信息安全书单!
  19. Not showing null elements
  20. 关于excle表格中日期时间筛选

热门文章

  1. Paros工具使用操作手册
  2. Selenium select-下拉列表处理
  3. c++ map用法_5分钟掌握Python | Map、Reduce和Filter如何运用?
  4. 关于地图制图大赛的8点说明,附地图学习资源
  5. graphics | R语言的基础绘图系统(二)—— 绘图参数及par函数
  6. sf | 判断点线面等几何对象的空间位置关系
  7. android 判断fragment类型,Android 判断当前Fragment是否可见(Visible)
  8. 如何添加二级标题_怎样给Word文档添加目录?
  9. java程序设计自考_java程序设计自考试题
  10. 2017计算机湖北对口试题答案,2017年计算机专业对口考试试卷及答案