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 题目大意:多个模式串.问匹配串中含有多少个模式串.注意模式串有重复,所以要累计重复结果. 解题 ...
随机推荐
- XML HTML
XML和HTML常用转义字符 XML和HTML中都有一些特殊的字符,这些字符在XML和HTML中是不能直接使用的,如果必须使用这些字符,应该使用其对应的转义字符. XML常用转义字符: 字符 转义字符 ...
- [css] 浏览器字体和css设置字体之间的关系
原文链接:http://www.zhangxinxu.com/wordpress/2010/06/%E5%8F%AF%E7%94%A8%E6%80%A7%E4%B9%8B%E6%B5%8F%E8%A7 ...
- Centos7 PHP7 编译安装 开机自启动
1.PHP7.0.13下载 wget http://cn2.php.net/get/php-7.0.13.tar.gz/from/this/mirror 2.解压 .tar.gz 3. 进入目录 cd ...
- C++时间函数模板
//测时间 class Timer { private: clock_t _start; clock_t _end; public: Timer() { start(); } void start() ...
- python把str转换为int
def str2int(s): def fn(x,y): return x+y def char2num(s): ':9}[s] return reduce(fn,map(char2num,s)) ' ...
- Windows Performance Monitoring with perfmon
直接引用 - https://technet.microsoft.com/en-us/magazine/2008.08.pulse.aspx
- TCP 连接建立和断开,以及状态转换
1. TCP报文结构 TCP是一种可靠.面向连接.全双工的传输层协议,其报文格式如下所示: 源端口.目的端口:16位长.标识出远端和本地的端口号. 顺序号:32位长.表明了发送的数据 ...
- SVN使用汇总
SVN项目管理文件夹:Tag/Branch/Trunk Trunk:在我经历的开发中,新建Trunk意味着对旧Trunk的一个保留,同时在新的Trunk中可以进行新功能的开发及对已有功能进行完善: B ...
- 深入理解JVM虚拟机-2自动内存管理机制
java虚拟机所管理的内存将会包括一下几个运行时数据区域. 程序计数器: 程序计数器是一块较小的内存空间.字节码解析式工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支.循环.跳转 ...
- form表单生成的简单理解
1, drupal_get_form,只要是准备$form_state['build_info']['arg'], 然后进入drupal_build_form(), 2, form build 主要有 ...