题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255

带权匹配问题的模板;

运用KM算法;

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<math.h>
  6. #define INF 0xfffffff
  7. #define N 330
  8. using namespace std;
  9.  
  10. int maps[N][N], visx[N], visy[N], used[N], lx[N], ly[N], s[N], n;
  11. ///visx[i]代表第i人是否在曾广路上,
  12. ///used[i]代表第i个村庄是否被占用;
  13. ///lx[],ly[]代表人和村庄的顶标;
  14. bool Find(int u)
  15. {
  16. visx[u] = ;
  17. for(int i=; i<=n; i++)
  18. {
  19. if(!visy[i] && lx[u]+ly[i] == maps[u][i])
  20. {
  21. visy[i] = ;
  22. if(!used[i] || Find(used[i]))
  23. {
  24. used[i]=u;
  25. return true;
  26. }
  27. }
  28. else
  29. {
  30. s[i] = min(s[i], lx[u]+ly[i] - maps[u][i]);
  31. }
  32. }
  33. return false;
  34. }
  35. int KM()
  36. {
  37. memset(used, , sizeof(used));
  38. memset(lx, , sizeof(lx));
  39. memset(ly, , sizeof(ly));
  40. for(int i=; i<=n; i++)
  41. {
  42. for(int j=; j<=n; j++)
  43. lx[i] = max(maps[i][j], lx[i]);///初始化人的顶标;
  44. }
  45. for(int i=; i<=n; i++)///寻找最大匹配;人
  46. {
  47. for(int j=; j<=n; j++)
  48. s[j]=INF;
  49. while()
  50. {
  51. memset(visx, , sizeof(visx));
  52. memset(visy, , sizeof(visy));
  53. if(Find(i))///找到的曾广路就退出,否则改变顶标,找到为止;
  54. break;
  55. int d = INF;
  56. for(int j=; j<=n; j++)
  57. {
  58. if(!visy[j])
  59. d=min(d, s[j]);
  60. }
  61. for(int j=; j<=n; j++)
  62. {
  63. if(visx[j])
  64. lx[j]-=d;
  65. if(visy[j])
  66. ly[j]+=d;
  67. }
  68. }
  69. }
  70. int ans=;
  71. for(int i=; i<=n; i++)
  72. {
  73. ans+=maps[used[i]][i];
  74. }
  75. return ans;
  76. }
  77.  
  78. int main()
  79. {
  80. while(scanf("%d", &n)!=EOF)
  81. {
  82. for(int i=; i<=n; i++)
  83. {
  84. for(int j=; j<=n; j++)
  85. scanf("%d", &maps[i][j]);
  86. }
  87. printf("%d\n", KM());
  88. }
  89. return ;
  90. }

奔小康赚大钱---hdu2255(最大带权匹配)的更多相关文章

  1. HDU - 2255 奔小康赚大钱(最大带权匹配)

     Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓, ...

  2. P - 奔小康赚大钱 - hdu 2255(带权值的匹配)

    分析:这是一个KM的模板题,也就不多说了,KM最复杂的情况都能过,下面是没有优化过的代码: ****************************************************** ...

  3. Hdu2255 奔小康赚大钱(二分图最大权匹配KM算法)

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

  4. (二分匹配 模板 KM)奔小康赚大钱--hdu--2255

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=2255 代码: #include <iostream> #include <cstdio ...

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

    HDU 2255 奔小康赚大钱(带权二分图最大匹配) Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊 ...

  6. hdu_2255_奔小康赚大钱(KM带权二分匹配板子)

    题目连接:hdu_2255_奔小康赚大钱 存个板子 /* 其实在求最大 最小的时候只要用一个模板就行了, 把边的权值去相反数即可得到另外一个.求结果的时候再去 相反数即可,最大最小有一些地方不同.. ...

  7. HDU2255 奔小康赚大钱 (最大权完美匹配) 模板题【KM算法】

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

  8. hdu2255 奔小康赚大钱 km算法解决最优匹配(最大权完美匹配)

    /** 题目:hdu2255 奔小康赚大钱 km算法 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:lv 思路:最优匹配(最大权完美匹配) ...

  9. hdu-2255.奔小康赚大钱(最大权二分匹配)

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

随机推荐

  1. js点击标签时获取当前标签属性值

    document.body.onclick=function(){ var obj = document.elementFromPoint(event.clientX,event.clientY); ...

  2. struts2零配置參考演示样例

    <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2 ...

  3. delphi7中添加QuickRep

    具体的方法是: delphi主菜单的Project|Options命令, 在Package选项卡的Desing packages列表中如果可以看到QuickReport Components选项, 那 ...

  4. Notepad++下载需要的插件(如何在Notepad++中手动下载需要的插件)

    需求说明: 下载在实际工作中需要的Notepad++插件,或者是因为Notepadd++设置的原因导致不能直接在软件中显示插件. 即手动登录到指定的链接中进行插件的下载. 操作过程: 1.以xmlto ...

  5. Excel时间格式修改为文本格式

  6. easyui------dialog如何固定位置

    转载: http://blog.csdn.net/dhdhdh0920/article/details/7438272 代var default_left; var default_top; $('# ...

  7. Java类的设计----Object 类

    Object类 Object类是所有Java类的根父类如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类 public class Person { ... } 等价于: ...

  8. hadoop程序MapReduce之SingletonTableJoin

    需求:单表关联问题.从文件中孩子和父母的关系挖掘出孙子和爷奶关系 样板:child-parent.txt xiaoming daxiong daxiong alice daxiong jack 输出: ...

  9. office2010如何使用excel冻结窗格

    当我们在制作一个Excel表格时,如果列数较多,行数也较多时,一旦向下滚屏,则上面的标题行也跟着滚动,在处理数据时往往难以分清各列数据对应的标题,事实上利用"冻结窗格"功能可以很好 ...

  10. 正则表达式—RegEx(RegularExpressio)(一)

    今日随笔,想和大家分享一下正则表达式的相关知识. 先不说概念性的东西,举一个例子再说. 验证你输入的邮政编码 ,你输入的邮政编码必须是六位的数字. while (true) { Console.Wri ...