题目大意:

给定每一个人能支付的房子价值,每个人最多且必须拥有一套房子,问最后分配房子可得到的最大收益

抄了个别人的KM模板,就这样了。。。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6 #define N 305
 7 const int INF = 0x7fffffff;
 8 int n , nx , ny;
 9 int slack[N] , lx[N] , ly[N] , linker[N] , w[N][N] , visx[N] , visy[N];
10
11 int dfs(int u)
12 {
13     visx[u] = 1;
14     for(int y=1 ; y<=ny ; y++){
15         if(visy[y]) continue;
16         int tmp = lx[u]+ly[y]-w[u][y];
17         if(tmp == 0){
18             visy[y]=1;
19             if(linker[y]==-1 || dfs(linker[y])){
20                 linker[y]=u;
21                 return 1;
22             }
23         }
24         else if(slack[y]>tmp) slack[y] = tmp;
25     }
26     return 0;
27 }
28
29 int KM()
30 {
31     memset(linker , -1 , sizeof(linker));
32     memset(ly , 0 , sizeof(ly));
33     //lx初始化为最大的边长
34     for(int i=1 ; i<=nx ; i++)
35     {
36         lx[i] = -INF;
37         for(int j=1 ; j<=ny ; j++)
38             lx[i] = max(lx[i] , w[i][j]);
39     }
40     for(int i=1 ; i<=nx ; i++){
41         for(int j=1 ; j<=ny ; j++){
42             slack[j] = INF;
43         }
44         while(true){
45             memset(visx , 0 , sizeof(visx));
46             memset(visy , 0 , sizeof(visy));
47             if(dfs(i)) break; //若找不到增广路,就需要改变一下标号
48             int a = INF;
49             for(int k=1 ; k<=ny ; k++)
50                 if(!visy[k]&&a>slack[k])
51                     a = slack[k];
52             for(int k=1 ; k<=nx ; k++)
53                 if(visx[k])
54                     lx[k]-=a;
55             for(int k=1 ; k<=nx ; k++)
56                 if(visy[k]) ly[k]+=a;
57                 else slack[k]-=a;
58         }
59     }
60     int res = 0;
61     for(int i=1 ; i<=ny ; i++)
62         if(linker[i]!=-1)
63             res+=w[linker[i]][i];
64     return res;
65 }
66
67 int main()
68 {
69    // freopen("in.txt" , "r" , stdin);
70     while(~scanf("%d" , &n))
71     {
72         for(int i=1 ; i<=n ; i++)
73             for(int j=1 ; j<=n ; j++) scanf("%d" , &w[i][j]);
74         nx = n , ny = n;
75         int ans = KM();
76         printf("%d\n" , ans);
77     }
78     return 0;
79 }

转载于:https://www.cnblogs.com/CSU3901130321/p/4710924.html

HDU 2255 二分图最佳匹配 模板题相关推荐

  1. HDU - 奔小康赚大钱(二分图最佳匹配+KM)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...

  2. POJ 2195 【二分图最佳匹配】.cpp

    题意: 有 n 个房子和 n 个人 每个人走一个单元你就要付 1$ 有什么办法可以让把所有人都分派到房子里 而花费最少 输入: 给出n m 表示该矩阵由n 行 m 列组成 然后给出一个n*m的图 . ...

  3. UOJ#80 二分图最大权匹配 [模板题]

    从前一个和谐的班级,有 nlnl 个是男生,有 nrnr 个是女生.编号分别为 1,-,nl1,-,nl 和 1,-,nr1,-,nr. 有若干个这样的条件:第 vv 个男生和第 uu 个女生愿意结为 ...

  4. hdu 2255二分图最大权值匹配的KM 算法

    对KM的深入理解请看以下博客(写的不错的):http://blog.sina.com.cn/s/blog_691ce2b701016reh.html 我的理解:如有错误,请大牛指正!! 1.KM()算 ...

  5. POJ365Ants_二分图最佳匹配

    https://blog.csdn.net/lianai911/article/details/44835659 题意: 在坐标系中有N只蚂蚁,N棵苹果树,给你蚂蚁和苹果树的坐标.让每只蚂蚁去一棵苹果 ...

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

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

  7. HDU 3353 二分图的匹配,最大独立集==最小覆盖点

    题意::从中选出最多的数能够使得其两两之间不能整除 既然是找两两之间不能整除的集合里面的个数,那就是用所有的点减去能够匹配到的整除的匹配数就行,这就是最大独立集 都说这题需要去重但是可以不用去,但需要 ...

  8. 单词数 HDU - 2072(字典树模板题amp;stl)

    lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是帮助xiaoou333解决这个问题. Input 有多组数据,每组一行,每组就 ...

  9. UVA-1045 - The Great Wall Game(二分图最佳匹配)

    题意:在一个n*n的棋盘上有n个棋子,要求通过移动棋子使棋子的排布满足以下情况之一:呈横行排列:呈纵行排列:呈对角线排列(有两条). 棋子移动一个单元格的费用为1,总费用为所有棋子的移动费用之和.求最 ...

最新文章

  1. JS对象直接量,数组直接量和函数直接量
  2. 2014-04-03研究笔记整理
  3. 快快: 一点即玩的游戏客户端平台
  4. 【Eclipse中使用Git之一】把远程仓库的项目,clone到eclipse里面
  5. 差分约束 1:pku 1201 Intervals 2:pku 1364 King 3:hdu 1534
  6. 导出Excel表格时,如何把数据库表中的编号转换成配置文件中的汉字
  7. Android Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE解决办法
  8. 普通类和抽象类有哪些区别?
  9. background相关属性
  10. 数据是否服从正态分布
  11. 硅谷初创企业控制成本 裁员风渐起
  12. CAN FD:测量和重编程
  13. python打开读取文件内容
  14. tomcat 虚拟目录配置appBase和docBase的区别
  15. CTF Crypto/MISC 在线工具网站
  16. 往事依稀浑似梦 都随风雨到心头 ——OI回忆录
  17. mybatis框架实现一对多、多对多关系查询,以及递归查询(单表多级分类:省市区三级地址查询)
  18. 二元函数可微与可导的关系_函数连续、可导与可微之间的关系
  19. 超市销售数据分析python_基于Python的超市O2O营销数据分析
  20. 京东智能供应链决策引擎全面开放;LinkedIn开源Dagli,发布Java机器学习函数库...

热门文章

  1. Vue3之——和Vite不得不说的事
  2. Java Web中的中文编码问题分析
  3. 干货|如何在无回显时渗透
  4. 某大学多站联动获取webshell
  5. 在windows上编译apr等相关动态库
  6. Java中定义实例变量时指定初始化值顺序
  7. 通俗易懂的泰勒展开微积分推导过程
  8. Scala入门到精通——第十六节 泛型与注解
  9. dojo中的dojo/dom-attr
  10. Elasticsearch过滤与聚合的先后顺序java实现