题目大意:

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

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

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 305
const int INF = 0x7fffffff;
int n , nx , ny;
int slack[N] , lx[N] , ly[N] , linker[N] , w[N][N] , visx[N] , visy[N]; int dfs(int u)
{
visx[u] = ;
for(int y= ; y<=ny ; y++){
if(visy[y]) continue;
int tmp = lx[u]+ly[y]-w[u][y];
if(tmp == ){
visy[y]=;
if(linker[y]==- || dfs(linker[y])){
linker[y]=u;
return ;
}
}
else if(slack[y]>tmp) slack[y] = tmp;
}
return ;
} int KM()
{
memset(linker , - , sizeof(linker));
memset(ly , , sizeof(ly));
//lx初始化为最大的边长
for(int i= ; i<=nx ; i++)
{
lx[i] = -INF;
for(int j= ; j<=ny ; j++)
lx[i] = max(lx[i] , w[i][j]);
}
for(int i= ; i<=nx ; i++){
for(int j= ; j<=ny ; j++){
slack[j] = INF;
}
while(true){
memset(visx , , sizeof(visx));
memset(visy , , sizeof(visy));
if(dfs(i)) break; //若找不到增广路,就需要改变一下标号
int a = INF;
for(int k= ; k<=ny ; k++)
if(!visy[k]&&a>slack[k])
a = slack[k];
for(int k= ; k<=nx ; k++)
if(visx[k])
lx[k]-=a;
for(int k= ; k<=nx ; k++)
if(visy[k]) ly[k]+=a;
else slack[k]-=a;
}
}
int res = ;
for(int i= ; i<=ny ; i++)
if(linker[i]!=-)
res+=w[linker[i]][i];
return res;
} int main()
{
// freopen("in.txt" , "r" , stdin);
while(~scanf("%d" , &n))
{
for(int i= ; i<=n ; i++)
for(int j= ; j<=n ; j++) scanf("%d" , &w[i][j]);
nx = n , ny = n;
int ans = KM();
printf("%d\n" , ans);
}
return ;
}

HDU 2255 二分图最佳匹配 模板题的更多相关文章

  1. HDU 2255 二分图最佳匹配

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

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

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

  3. hdu2255 奔小康赚大钱 二分图最佳匹配--KM算法

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

  4. hdu3488 Tour 拆点+二分图最佳匹配

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

  5. hdu 2255 二分图最大权匹配 *

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

  6. hdu 2063 过山车(二分图最佳匹配)

    经典的二分图最大匹配问题,因为匈牙利算法我还没有认真去看过,想先试试下网络流的做法,即对所有女生增加一个超级源,对所有男生增加一个超级汇,然后按照题意的匹配由女生向男生连一条边,跑一个最大流就是答案( ...

  7. HDU 2426 Interesting Housing Problem(二分图最佳匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=2426 题意:每n个学生和m个房间,现在要为每个学生安排一个房间居住,每个学生对于一些房间有一些满意度,如果满意度 ...

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

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

  9. HDU 2222(AC自动机模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2222 题目大意:多个模式串.问匹配串中含有多少个模式串.注意模式串有重复,所以要累计重复结果. 解题 ...

随机推荐

  1. iOS开发之 Xcode 一个工程 Project 添加多个 target

    http://www.360doc.com/content/14/1203/11/19119980_430056974.shtml# 根据项目需求,同一个工程有多个版本,每个版本只有细微的不同.所以, ...

  2. Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈

    版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/98 来源:腾云阁 https://www.qclou ...

  3. 【转】实现RTP协议的H.264视频传输系统

    1.  引言       随着信息产业的发展,人们对信息资源的要求已经逐渐由文字和图片过渡到音频和视频,并越来越强调获取资源的实时性和互动性.但人们又面临着另外一种不可避免的尴尬,就是在网络上看到生动 ...

  4. mysql通过binlog日志来恢复数据

    简介 在生产的过程中有这么一个业务场景:比如我在2016-11-19 09:30:00 通过mysqldump的方式备份了数据库,但是在2016-11-19 10:30:00的时候数据库崩溃了,如果通 ...

  5. Xcode + Swift 制作动态原型

    转载: Xcode + Swift 制作动态原型 为什么是 Xcode 和 Swift 我们尝试过的动态原型设计工具,Origami, Form, Hype, FramerJS,Pixate 等,但都 ...

  6. PHP 启动 cURL模块以及启动失败的解决方案

    配置方法: php_curl.dll libeay32.dll ssleay32.dll php5ts.dll 复制到 %windir%/system32 以及php 目录的ext目录 下 并且找到p ...

  7. express+nodecoffee写passport登录验证实例(一)

    项目中要用到passport登录验证,环境如标题样:express框架,coffee模版引擎,node后台 一:建项目 直接用express命令建,虽然默认模版为jade,可以手动换成coffee哦. ...

  8. Steam和Byte[]之间进行输换

    一. 二进制转换成图片 MemoryStream ms = new MemoryStream(bytes); ms.Position = 0; Image img = Image.FromStream ...

  9. PDF 补丁丁 0.4.1.804 测试版发布:合并文件夹的图片和PDF文件,自由生成多层次书签

    新的测试版增强了合并文件的功能,可以合并文件夹内的图片和PDF文件,还可以在合并文件列表上直接指定与合并文件对应的PDF书签标题.通过拖放文件项目生成多层次的PDF书签.如下图所示: 另外,新的测试版 ...

  10. linux service等命令不能使用的解决办法

    主要是路径没添加进来: 在shell里面输入这条命令:export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin ...