用到了KM算法 ,发现自己没有这个模板,搜索学习一下上海大学final大神,http://www.cnblogs.com/kuangbin/p/3228861.html

  1. #include <stdio.h>
  2. #include <algorithm>
  3. #include <string.h>
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. /* KM算法
  8. * 复杂度O(nx*nx*ny)
  9. * 求最大权匹配
  10. * 若求最小权匹配,可将权值取相反数,结果取相反数
  11. * 点的编号从0开始
  12. */
  13. const int N = ;
  14. const int INF = 0x3f3f3f3f;
  15. int nx,ny;//两边的点数
  16. int g[N][N];//二分图描述
  17. int linker[N],lx[N],ly[N];//y中各点匹配状态,x,y中的点标号
  18. int slack[N];
  19. bool visx[N],visy[N];
  20.  
  21. bool DFS(int x)
  22. {
  23. visx[x] = true;
  24. for(int y = ; y < ny; y++)
  25. {
  26. if(visy[y])continue;
  27. int tmp = lx[x] + ly[y] - g[x][y];
  28. if(tmp == )
  29. {
  30. visy[y] = true;
  31. if(linker[y] == - || DFS(linker[y]))
  32. {
  33. linker[y] = x;
  34. return true;
  35. }
  36. }
  37. else if(slack[y] > tmp)
  38. slack[y] = tmp;
  39. }
  40. return false;
  41. }
  42. int KM()
  43. {
  44. memset(linker,-,sizeof(linker));
  45. memset(ly,,sizeof(ly));
  46. for(int i = ;i < nx;i++)
  47. {
  48. lx[i] = -INF;
  49. for(int j = ;j < ny;j++)
  50. if(g[i][j] > lx[i])
  51. lx[i] = g[i][j];
  52. }
  53. for(int x = ;x < nx;x++)
  54. {
  55. for(int i = ;i < ny;i++)
  56. slack[i] = INF;
  57. while(true)
  58. {
  59. memset(visx,false,sizeof(visx));
  60. memset(visy,false,sizeof(visy));
  61. if(DFS(x))break;
  62. int d = INF;
  63. for(int i = ;i < ny;i++)
  64. if(!visy[i] && d > slack[i])
  65. d = slack[i];
  66. for(int i = ;i < nx;i++)
  67. if(visx[i])
  68. lx[i] -= d;
  69. for(int i = ;i < ny;i++)
  70. {
  71. if(visy[i])ly[i] += d;
  72. else slack[i] -= d;
  73. }
  74. }
  75. }
  76. int res = ;
  77. for(int i = ;i < ny;i++)
  78. if(linker[i] != -)
  79. res += g[linker[i]][i];
  80. return res;
  81. }
  82. //HDU 2255
  83. int main()
  84. {
  85. int n;
  86. while(scanf("%d",&n) == )
  87. {
  88. for(int i = ;i < n;i++)
  89. for(int j = ;j < n;j++)
  90. scanf("%d",&g[i][j]);
  91. nx = ny = n;
  92. printf("%d\n",KM());
  93. }
  94. return ;
  95. }

end

KM算法 PK 最小费用最大流的更多相关文章

  1. 经典贪心算法(哈夫曼算法,Dijstra单源最短路径算法,最小费用最大流)

    哈夫曼编码与哈夫曼算法 哈弗曼编码的目的是,如何用更短的bit来编码数据. 通过变长编码压缩编码长度.我们知道普通的编码都是定长的,比如常用的ASCII编码,每个字符都是8个bit.但在很多情况下,数 ...

  2. hdu 1533 Going Home 最小费用最大流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1533 On a grid map there are n little men and n house ...

  3. hdu 3395(KM算法||最小费用最大流(第二种超级巧妙))

    Special Fish Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  4. hdu 3488(KM算法||最小费用最大流)

    Tour Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submis ...

  5. hdu 1853 Cyclic Tour (二分匹配KM最小权值 或 最小费用最大流)

    Cyclic Tour Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/65535 K (Java/Others)Total ...

  6. hdoj 1533 Going Home 【最小费用最大流】【KM入门题】

    Going Home Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  7. 图论算法-最小费用最大流模板【EK;Dinic】

    图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...

  8. 算法笔记--最大流和最小割 && 最小费用最大流 && 上下界网络流

    最大流: 给定指定的一个有向图,其中有两个特殊的点源S(Sources)和汇T(Sinks),每条边有指定的容量(Capacity),求满足条件的从S到T的最大流(MaxFlow). 最小割: 割是网 ...

  9. POJ 3680 Intervals 最小费用最大流(MCMF算法)

    题意:给出 n ,k 表示接下来给你 n 段开区间,每段区间都有它的权值,问选出一些区间,使它的权值最大,并且在实轴上的每个点,不得超过 k次被覆盖. 思路:首先要理解建图思路,首先有一个基图,相邻点 ...

随机推荐

  1. OpenCV——归一化函数normalize

    函数原型: void cv::normalize(InputArry src,InputOutputArray dst,double alpha=1,double beta=0,int norm_ty ...

  2. odoo 打印格式中 打印第一个数据默认

    <table style="width:100%;"> <tr> <td style="word-wrap:break-word;width ...

  3. iOS开发之使用UIView-Positioning简化页面布局

    使用过代码布局的人可能会有这样的感觉,给控件设置frame的时候比较繁琐.最 近在Github上看到有一个UIView的一个分类UIView-Positioning,这个分类提供了一些属性,比如lef ...

  4. [笔记] Redis的安装与配置超级详细

    目录 Windows下安装与配置 下载 安装 验证安装 配置服务 测试 Linux下安装与配置 准备工作 安装 验证与测试 Macox下安装与配置 准备工作 安装 验证与测试 Redis 在 Wind ...

  5. 2017-2018-2 20155224『网络对抗技术』Exp8:Web基础

    实践具体要求 Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. Web前端javascipt(0.5分) 理 ...

  6. JAVA eclipse Maven项目红叹号解决方案

    我是通过 Windows --> show view --> problems 查看到发现 ch.qos.logback 1.1.1 出现了错误, 于是我换成了 ch.qos.logbac ...

  7. JavaScript快速入门-ECMAScript本地对象(RexExp)

    一.概述 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 正则表达式是由一个字符序列形成的搜索模式. 当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容. 正则表达式 ...

  8. 设计模式 笔记 迭代器模式 Iterator

    //---------------------------15/04/26---------------------------- //Iterator 迭代器模式----对象行为型模式 /* 1:意 ...

  9. 巧用cheerio重构grunt-inline

    grunt-inline是楼主之前写的一个插件,主要作用是把页面带了__inline标记的资源内嵌到html页面去.比如下面的这个script标签. <script src="main ...

  10. NodeMCU学习(三) : 进入网络世界

    把NodeMCU连接到路由器网络上 NodeMCU可以被配置为Station模式和softAP模式或者Station + AP模式,当它被配置为Station模式时,就可以去连接Access Poin ...