HDU 2255 二分图最佳匹配 模板题
题目大意:
给定每一个人能支付的房子价值,每个人最多且必须拥有一套房子,问最后分配房子可得到的最大收益
抄了个别人的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 二分图最佳匹配 模板题的更多相关文章
- HDU 2255 二分图最佳匹配
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU2255 奔小康赚大钱【二分图最佳匹配】
题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=2255 题目大意: 村里要分房子. 有N家老百姓,刚好有N间房子.考虑到每家都要有房住,每家必须分配 ...
- hdu2255 奔小康赚大钱 二分图最佳匹配--KM算法
传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子住 ...
- hdu3488 Tour 拆点+二分图最佳匹配
In the kingdom of Henryy, there are N (2 <= N <= 200) cities, with M (M <= 30000) one-way r ...
- hdu 2255 二分图最大权匹配 *
题意:说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房 ...
- hdu 2063 过山车(二分图最佳匹配)
经典的二分图最大匹配问题,因为匈牙利算法我还没有认真去看过,想先试试下网络流的做法,即对所有女生增加一个超级源,对所有男生增加一个超级汇,然后按照题意的匹配由女生向男生连一条边,跑一个最大流就是答案( ...
- HDU 2426 Interesting Housing Problem(二分图最佳匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=2426 题意:每n个学生和m个房间,现在要为每个学生安排一个房间居住,每个学生对于一些房间有一些满意度,如果满意度 ...
- UOJ#80 二分图最大权匹配 [模板题]
从前一个和谐的班级,有 nlnl 个是男生,有 nrnr 个是女生.编号分别为 1,…,nl1,…,nl 和 1,…,nr1,…,nr. 有若干个这样的条件:第 vv 个男生和第 uu 个女生愿意结为 ...
- HDU 2222(AC自动机模板题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2222 题目大意:多个模式串.问匹配串中含有多少个模式串.注意模式串有重复,所以要累计重复结果. 解题 ...
随机推荐
- Java编程思想笔记
打好java基础 后续会增加相应基础笔试题 目录如下 1 对象导论2 一切都是对象3 操作符4 控制执行流程5 初始化与清理6 访问控制权限7 复用类8 多态9 接口10 内部类11 持有对象12 通 ...
- Ajax 完整教程 (转)
http://www.cnblogs.com/Garden-blog/archive/2011/03/11/1981778.html
- windows下重新安装TCP/IP协议栈
一.windows重装TCP/IP协议 前两天在windows下安装开发环境的时候,把系统的TCP/IP协议栈给搞跪了,导致系统无法ping localhost.无法在程序中创建socket等 ...
- 第三章 Python容器:列表、元组、字典与集合
数据结构的分类依据?基本的"数组"在python中是列表, 数据结构的作用?容器,盛放数据,是由原子组成的分子.可以将一群数据进行整合.拆分.重排. 3.2 列表 列表是啥?顺 ...
- js生成验证码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- linux笔记:linux系统安装-系统分区
分区类型: 1.主分区:最多只能有4个. 2.扩展分区:最多只能有1个:主分区+扩展分区最多有4个:不能写入数据,只能包含逻辑分区. 3.逻辑分区. 格式化: 向磁盘中写入文件系统.会附带地清空磁盘中 ...
- Eclipse小技巧
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ ...
- Bootstrap标签
Bootstrap是Twitter推出的一个用于前端开发的开源工具包.用外链加载的方式可以将Bootstrap链接进来 常用方式: <link rel="stylesheet" ...
- Android 子activity关闭 向父activity传值
使用startActivity方式启动的Activity和它的父Activity无关,当它关闭时也不会提供任何反馈. 可变通的,你可以启动一个Activity作为子Activity,它与父Activi ...
- Windows下Git的安装及配置
Git的BASH Git的为Windows提供了用于命令行运行的一个仿真BASH的Git.习惯LINUX和UNIX环境的你,可以在该BASH环境中输入“git”命令来完成各种版本控制的操作. 简介 G ...