HDU 2426 Interesting Housing Problem(二分图最佳匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=2426
题意:
每n个学生和m个房间,现在要为每个学生安排一个房间居住,每个学生对于一些房间有一些满意度,如果满意度为负就说明该学生不喜欢住在这房间。现在问如何安排可以使所有学生的满意度总和最大。(不能将学生安排到他不喜欢的房间或者他没有评价的房间)
思路:
二分图的最佳匹配,注意题目的要求即可。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = +;
const int INF = 0x3f3f3f3f; int n, m, k;
int g[maxn][maxn];
int lx[maxn], ly[maxn];
bool S[maxn], T[maxn]; //记录左右两边节点是否已匹配
int match[maxn];
int slack[maxn]; //差值 bool dfs(int i)
{
S[i] = true;
for (int j = ; j <= m; ++j)
{
if (T[j]) continue; //每一轮匹配,右边节点只能一次
int gap = lx[i] + ly[j] - g[i][j];
if (gap == ) //如果符合要求
{
T[j] = true;
if (match[j] == - || dfs( match[j] ))
{
match[j] = i;
return true;
}
}
else slack[j] = min(slack[j], gap);
}
return false;
} int KM()
{
memset(match, -, sizeof match);
memset(ly, , sizeof ly); //初始化ly为0
for (int i = ; i<=n; i++) //初始化lx[i]为该节点所有边中的最大权值
{
lx[i] = g[i][];
for (int j = ; j<=m; j++)
lx[i] = max(lx[i], g[i][j]);
}
for (int i=; i<=n; i++) //尝试为每个节点匹配节点
{
memset(slack,INF,sizeof(slack)); //因为要取最小值,初始化为无穷大
while (true) {
memset(S, false, sizeof S); //记录每轮匹配中左右节点是否被尝试匹配过
memset(T, false, sizeof T);
if (dfs(i)) break;
int d = INF;
for (int j=; j<=m; j++)
if (!T[j]) d = min(d, slack[j]);
for (int j=; j<=n; ++j)
if (S[j]) lx[j] -= d;
for(int j=;j<=m;j++)
{
if (T[j]) ly[j] += d;
else slack[j] -= d;
}
}
} int result = ,flag=;
for(int i = ; i <=m; i++){
if(match[i]==-||g[match[i]][i]==-INF)
continue;
if(match[i]>-){
result += g[match[i]][i];
flag++;
}
}
if(flag<n) result=-;
return result; } int main()
{
//freopen("in.txt","r",stdin);
int cas = ;
while(~scanf("%d%d%d",&n,&m,&k))
{
if(n>m)
{
printf("Case %d: %d\n", ++cas, -);
continue;
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
g[i][j] = -INF;
for(int i=;i<k;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
u++; v++;
if(w>=) g[u][v] = w;
}
int ans = KM();
printf("Case %d: %d\n", ++cas, ans);
}
return ;
}
HDU 2426 Interesting Housing Problem(二分图最佳匹配)的更多相关文章
- hdu 2426 Interesting Housing Problem 最大权匹配KM算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2426 For any school, it is hard to find a feasible ac ...
- HDU 2426 Interesting Housing Problem (最大权完美匹配)【KM】
<题目链接> 题目大意: 学校里有n个学生和m个公寓房间,每个学生对一些房间有一些打分,如果分数为正,说明学生喜欢这个房间,若为0,对这个房间保持中立,若为负,则不喜欢这个房间.学生不会住 ...
- HDU 3315 My Brute(二分图最佳匹配+尽量保持原先匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=3315 题意: 有S1到Sn这n个勇士要和X1到Xn这n个勇士决斗,初始时,Si的决斗对象是Xi. 如果Si赢了X ...
- HDU2255 奔小康赚大钱【二分图最佳匹配】
题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=2255 题目大意: 村里要分房子. 有N家老百姓,刚好有N间房子.考虑到每家都要有房住,每家必须分配 ...
- hdu3488 Tour 拆点+二分图最佳匹配
In the kingdom of Henryy, there are N (2 <= N <= 200) cities, with M (M <= 30000) one-way r ...
- hdu2255 奔小康赚大钱 二分图最佳匹配--KM算法
传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子住 ...
- hdu 2063 过山车(二分图最佳匹配)
经典的二分图最大匹配问题,因为匈牙利算法我还没有认真去看过,想先试试下网络流的做法,即对所有女生增加一个超级源,对所有男生增加一个超级汇,然后按照题意的匹配由女生向男生连一条边,跑一个最大流就是答案( ...
- HDU 2255 二分图最佳匹配
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 2255 二分图最佳匹配 模板题
题目大意: 给定每一个人能支付的房子价值,每个人最多且必须拥有一套房子,问最后分配房子可得到的最大收益 抄了个别人的KM模板,就这样了... #include <cstdio> #incl ...
随机推荐
- Presto 学习
Presto 基础知识与概念学习可以参考这些博客: presto 0.166概述 https://www.cnblogs.com/sorco/p/7060166.html Presto学习-prest ...
- Linux基础命令---文本格式转换fmt
fmt 将指定文件的内容,按照指定的格式重新排版,结果送到标准输出. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 ...
- nginx实现MySQL负载均衡
默认Nginx只支持http的反向代理,要想nginx支持tcp的反向代理,还需要在编译时增加tcp代理模块支持,即nginx_tcp_proxy_module 下面操作步骤只让nginx支持tcp_ ...
- kali linux 压缩文件解压缩命令(包含7z)
tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ——————————————— .gz 解压1 ...
- Ubuntu下sublime-text3安装步骤
1.在Ubuntu中按CTRL+ALT+T打开命令窗口,按下面步骤和命令进行安装即可: 添加sublime text 3的仓库: sudo add-apt-repository ppa:webupd8 ...
- 对gulp的理解和使用(一)
说的gulp,到底是什么?用来做什么的? 以前并没有想过这个问题,拿到公司的项目脚手架就开始做事情了.现在专门来总结一下. gulp干什么的呢? gulp是node中的一种代码构建工具,还有就是项目自 ...
- php 接收blob数据流,base64数据流 转为 blob二进制数据流
php正常接收参数的方式如下:$_GET$_POST$_REQUEST 但是如果跨语言接收请求参数的话,可能会出现一系列的问题,其他语言的http请求可能是基于数据流的概念来传递参数的,如果按照常规处 ...
- bzoj2152 / P2634 [国家集训队]聪聪可可(点分治)
P2634 [国家集训队]聪聪可可 淀粉质点分治板子 边权直接 mod 3 直接点分治统计出所有的符合条件的点对再和总方案数约分 至于约分.....gcd搞搞就好辣 #include<iostr ...
- Linux Centos 7.4 内核升级
Linux Centos 7.4 内核升级 原始内核版本:3.10.0-693.2.2.el7.x86_64 升级内核版本:4.14.9-1.el7.elrepo.x86_64 1.导入key Key ...
- win7改装 CentOS7,装完后开机,没有引导
本来系统是win7,安装centos是用U盘启动安装方式安装成功后,发现win7的系统引导不见了.之前用的是centos6.4安装后依然保留win7引导的,到centos7就不行了 解决方法1.使用r ...