二分图最大权值匹配问题。用KM算法。

最小权值的时候把权值设置成相反数

 /*--------------------------------------------------------------------------------------*/

 #include <algorithm>
 #include <iostream>
 #include <cstring>
 #include <ctype.h>
 #include <cstdlib>
 #include <cstdio>
 #include <vector>
 #include <string>
 #include <queue>
 #include <stack>
 #include <cmath>
 #include <set>
 #include <map>

 //debug function for a N*M array
 #define debug_map(N,M,G) printf("\n");for(int i=0;i<(N);i++)\
 {;j<(M);j++){\
 printf("%d",G[i][j]);}printf("\n");}
 //debug function for int,float,double,etc.
 #define debug_var(X) cout<<#X"="<<X<<endl;
 #define LL long long
 const int INF = 0x3f3f3f3f;
 const LL LLINF = 0x3f3f3f3f3f3f3f3f;
 /*--------------------------------------------------------------------------------------*/
 using namespace std;

 int N,M,T;
 ;
 int nx,ny;
 int g[maxn][maxn];
 int linker[maxn],lx[maxn],ly[maxn];
 int slack[maxn];
 bool visx[maxn],visy[maxn];
 bool DFS(int x)
 {
     visx[x] = true;
     ;y<ny;y++)
     {
         if(visy[y]) continue;
         int tmp = lx[x] + ly[y] - g[x][y];
         )
         {
             visy[y] = true;
              || DFS(linker[y]))
             {
                 linker[y] = x;
                 return true;
             }
         }
         else if(slack[y] > tmp) slack[y] = tmp;
     }
     return false;
 }
 int KM()
 {
     memset(linker,-,sizeof linker);
     memset(ly,,sizeof ly);
     ;i<nx;i++)
     {
         lx[i] = -INF;
         ;j<ny;j++)   lx[i] = max(lx[i],g[i][j]);
     }
     ;x<nx;x++)
     {
         ;i<ny;i++) slack[i] = INF;
         while(true)
         {
             memset(visx,false,sizeof visx);
             memset(visy,false,sizeof visy);
             if(DFS(x)) break;
             int d = INF;
             ;i<ny;i++) if(!visy[i] && d > slack[i]) d = slack[i];
             ;i<nx;i++) if(visx[i]) lx[i] -= d;
             ;i<ny;i++)
             {
                 if(visy[i]) ly[i] += d;
                 else slack[i] -= d;
             }
         }
     }
     ;
     ;i<ny;i++) ) res += g[linker[i]][i];
     return res;
 }
 int main()
 {
     while(~scanf("%d",&N))
     {
         ;i<N;i++)
         {
             ;j<N;j++)
             {
                 scanf("%d",&g[i][j]);
             }
         }
         nx = ny = N;
         printf("%d\n",KM());
     }
 }

HDU2255-奔小康赚大钱-二分图最大权值匹配-KM算法的更多相关文章

  1. HD2255奔小康赚大钱(最大权匹配模板)

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

  2. 【模板】二分图最大权完美匹配KM算法

    hdu2255模板题 KM是什么意思,详见百度百科. 总之知道它可以求二分图最大权完美匹配就可以了,时间复杂度为O(n^3). 给张图. 二分图有了边权,求最大匹配下的最大权值. 所以该怎么做呢?对啊 ...

  3. HDU2255 奔小康赚大钱【二分图最佳匹配】

    题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=2255 题目大意: 村里要分房子. 有N家老百姓,刚好有N间房子.考虑到每家都要有房住,每家必须分配 ...

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

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

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

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

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

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

  7. 奔小康赚大钱(km)

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

  8. 奔小康赚大钱 hdu 2255

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

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

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

随机推荐

  1. IIS初始化(预加载),解决第一次访问慢,程序池被回收问题

    你以为你可以慢,那是不可能的!你以为你可以不动,那也是不可能的! 河南是守株待兔故事情节的发源地,讲的是懒惰的农夫坐在树桩旁等待可爱的小毛兔撞树的故事,那么这种事情怎么可能天天出现呢!你以为的事并一定 ...

  2. hdu 1878

    http://acm.hdu.edu.cn/showproblem.php?pid=1878 题意:就是判断这个图是不是一个欧拉回路的一个题, 思路:我觉得这个题可以用并查集判环加上判断每个点的度就行 ...

  3. angular源码分析:angular中入境检察官$sce

    一.ng-bing-html指令问题 需求:我需要将一个变量$scope.x = '<a href="http://www.cnblogs.com/web2-developer/&qu ...

  4. java19

    1:异常(理解) (1)程序出现的不正常的情况. (2)异常的体系 Throwable |--Error 严重问题,我们不处理. |--Exception |--RuntimeException 运行 ...

  5. Storm入门3-集群搭建

    [storm集群的搭建以及将开发好的拓扑提交到集群上运行的方法] 在上一篇文章中,我们的拓扑直接运行,并在程序开始时候自动启动一个本地"集群"来运行拓扑.LocalCluster这 ...

  6. HM NIS Edit 2.0.3 Win32 Error. Code:740.请求的操作需要提升

    使用NSIS安装向导,生成脚本后,按F9后,居然提示:HM NIS Edit 2.0.3 Win32 Error. Code:740.请求的操作需要提升 一开始就出错了,还真不顺. 在网上搜索了一下, ...

  7. Log功能

    目录控制开关,若存在则创建log文件,输出. 宏函数,若debug打开,则输出. 多线程输出到同一文件. 通过mutex控制多个进程同时创建log文件.

  8. JS手机端去除默认自带的选择复制菜单

    在需要的div上添加以下控制-webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: ...

  9. [翻译]:SQL死锁-阻塞

    一般情况下死锁不是一步到位的,它必须满足特定的条件,然后形成资源的循环依赖才会产生死锁,死锁之前一定会出现阻塞,由阻塞升级才有可能出现死锁,所以我们有必要了解系统中都有哪些已经被阻塞的锁. 我在解决共 ...

  10. viewport的一些事

    整理了下viewport的东西,用脑图画了下