百科:http://baike.baidu.com/link?url=vbM3H4XmfrsWfP-epdlR2sVKSNzOq4hXnWDqm5uo8fd7VWsF2SmhDV35XyVUDvVjvrtf42RUITJuNCHn-7_x6K

大神总结:http://www.cnblogs.com/skyming/archive/2012/02/18/2356919.html

代码:

  1. #include<stdio.h>
  2. #include<string.h>
  3. const int N=,INF=0x3f3f3f3f;
  4. int lx[N],ly[N],vx[N],vy[N],slack[N],match[N];
  5. int a[N][N];
  6. int nx,ny;
  7. int dfs(int u)
  8. {
  9. vx[u]=;
  10. for(int i=;i<=ny;i++)
  11. {
  12. if(vy[i]) continue;
  13. int t=lx[u]+ly[i]-a[u][i];
  14. if(t==)
  15. {
  16. vy[i]=;
  17. if(match[i]==-||dfs(match[i]))
  18. {
  19. match[i]=u;
  20. return ;
  21. }
  22. }
  23. else if(slack[i]>t)
  24. slack[i]=t;
  25. }
  26. return ;
  27. }
  28. int KM()
  29. {
  30. int i,j,d;
  31. memset(ly,,sizeof(ly));
  32. memset(match,-,sizeof(match));
  33. for(i=,lx[i]=-INF;i<=nx;i++)
  34. for(j=;j<=ny;j++)
  35. if(a[i][j]>lx[i])
  36. lx[i]=a[i][j];
  37. for(i=;i<=nx;i++)
  38. {
  39. memset(slack,0x3f,sizeof(slack));
  40. while()
  41. {
  42. memset(vx,,sizeof(vx));
  43. memset(vy,,sizeof(vy));
  44. if(dfs(i)) break;
  45. d=INF;
  46. for(j=;j<=ny;j++)
  47. if(!vy[j]&&slack[j]<d)
  48. d=slack[j];
  49. //if(d==INF) break;//该点找不到任何匹配
  50. for(j=;j<=nx;j++)
  51. if(vx[j])
  52. lx[j]-=d;
  53. for(j=;j<=ny;j++)
  54. {
  55. if(vy[j])
  56. ly[j]+=d;
  57. else
  58. slack[j]-=d;
  59. }
  60. }
  61. }
  62. int ans=,sum=;
  63. for(i=;i<=ny;i++)
  64. if(match[i]>-&&a[match[i]][i])
  65. ans+=a[match[i]][i],sum++;
  66. printf("%d++\n",sum);//匹配数
  67. return ans;
  68. }
  69. int main()
  70. {
  71. int m,u,v,w,n,i;
  72. scanf("%d",&nx);
  73. scanf("%d",&ny);
  74. scanf("%d",&m);
  75. memset(a,,sizeof(a));
  76. while(m--)
  77. {
  78. scanf("%d%d%d",&u,&v,&w);
  79. a[u][v]=a[v][u]=w;
  80. }
  81. printf("%d\n",KM());
  82. return ;
  83. }

二分匹配之最大权值匹配算法---KM模板的更多相关文章

  1. HDU2255-奔小康赚大钱-二分图最大权值匹配-KM算法

    二分图最大权值匹配问题.用KM算法. 最小权值的时候把权值设置成相反数 /*-------------------------------------------------------------- ...

  2. POJ 2400 Supervisor, Supervisee(KM二分图最大权值匹配)题解

    题意:n个老板n个员工,先给你n*n的数据,i行j列代表第i个老板第j喜欢的员工是谁,再给你n*n的数据,i行j列代表第i个员工第j喜欢的老板是谁,如果匹配到第k喜欢的人就会产生一个分数k-1.现在让 ...

  3. 奔小康赚大钱 HDU - 2255(最大权值匹配 KM板题)

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

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

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

  5. kuangbin带你飞 匹配问题 二分匹配 + 二分图多重匹配 + 二分图最大权匹配 + 一般图匹配带花树

    二分匹配:二分图的一些性质 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j ...

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

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

  7. Tour HDU - 3488(最大权值匹配)

    Tour In the kingdom of Henryy, there are N (2 <= N <= 200) cities, with M (M <= 30000) one- ...

  8. hdu 1853 Cyclic Tour 最大权值匹配 全部点连成环的最小边权和

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1853 Cyclic Tour Time Limit: 1000/1000 MS (Java/Others) ...

  9. poj3565 Ants km算法求最小权完美匹配,浮点权值

    /** 题目:poj3565 Ants km算法求最小权完美匹配,浮点权值. 链接:http://poj.org/problem?id=3565 题意:给定n个白点的二维坐标,n个黑点的二维坐标. 求 ...

随机推荐

  1. memcache与memcached扩展的区别

    一.服务端 之前理解错误了.服务端只有一个memcache,一般把服务端称作memcached(带d),是因为守护进程的名称就是叫做memcached(一个这样的执行程序文件). 编写的语言:c语言 ...

  2. 【使用 DOM】使用事件

    1. 使用简单事件处理器 可以用几种不同的方式处理事件.最直接的方式是用事件属性创建一个简单事件处理器(simple event handler).元素为它们支持的每一种事件都定义了一个事件属性.举个 ...

  3. iOS设计模式之单例模式

    单例模式 基础理解 所有类都有构造方法,不编码则系统默认生成空的构造方法,若有显示定义的构造方法,默认的构造方法就会失效. 单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全 ...

  4. Objective-C之优雅的命名

    There are only two hard things in Computer Science: cache invalidation and naming things.在计算机科学中只有两件 ...

  5. App Icon生成工具(转载)

    原地址:http://www.cocoachina.com/bbs/read.php?tid=290247 下载软件:在AppStore搜索App Icon Gear 打开软件 决定制作启动图或图标, ...

  6. Mac上的软件使用介绍

    目录大纲: Drop to GIF Parallels Desktop 1.Drop to GIF 功能:将视频文件可以生产动态图gif文件 网址在github上:https://github.com ...

  7. UVa 100 - The 3n + 1 problem(函数循环长度)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

  8. 快捷下载 sourceForge下的资源

    一些开源项目通常会放在  sourceforge.net下面发布.然而,这个网站有时候出现卡顿,并且需要点击几次页面才能下载到自己想要的资源. 这里有个好办法,一步列出所有可下载的资源:        ...

  9. android多种布局的列表实现

    最近有一个列表效果,需要一个列表有多种布局,最终效果如下: 这个我也问了同事以及开发群里的朋友,居然都没得到最优的实现方式的回答,看来这种复杂列表的需求还是比较少的,我自己也走了一些弯路,把我几个实现 ...

  10. Asp.net MVC 4新项目中创建area的后续操作

    Asp.net MVC 4新项目中创建area后,往往HomeController与area的HomeController路由发生混淆,需要手工设置一些地方避免mvc无法识别默认路由的状况. 无废话具 ...