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 ...
随机推荐
- AWS免费云服务套餐申请步骤及常见问题
AWS免费云服务套餐申请步骤及常见问题 AWS免费使用套餐常见问题_AWS免费云服务套餐_-AWS云服务https://amazonaws-china.com/cn/free/faqs/ 什么是 AW ...
- [转载]web服务器
Web系统由客户端(浏览器)和服务器端两部分组成.Web系统架构也被称为B/S架构.最常见的Web服务器有Apache.IIS等,常用的浏览器有IE.Firefox.chrome等.当你想访问一个网页 ...
- .net大型平台通过Nginx做负载均衡(Web层、中间服务层、DB层)
.net平台下,我目前部署过的均衡负载有两种方式(iis7和Nginx),以下以Nginx为例讲解web层的均衡负载. 简介:Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx ...
- 怎样从外网访问内网WebLogic?
本地安装了一个WebLogic,只能在局域网内访问,怎样从外网也能访问到本地的WebLogic呢?本文将介绍具体的实现步骤. 准备工作 安装并启动WebLogic 默认安装的WebLogic端口是70 ...
- 怎样从外网访问内网Jboss?
本地安装了一个Jboss,只能在局域网内访问,怎样从外网也能访问到本地的Jboss呢?本文将介绍具体的实现步骤. 准备工作 安装并启动Jboss 默认安装的Jboss端口是8080. 实现步骤 下载并 ...
- Windows下用cmd命令实例讲解yii2.0 的控制台定时任务
Yii中的资源是和Web页面相关的文件,可为CSS文件,JavaScript文件,图片或视频等,资源放在Web可访问的目录下,直接被Web服务器调用. 有时候有些功能需要做到计划任务中去,因此就需要y ...
- PyCharm配置MySQL
有时候电脑没有安装Navicat,也想要操作数据库,那么PyCharm也能实现Navicat的一些功能.下面演示,用PyCharm如何连接数据库并执行操作: 1. 打开PyCharm,在右侧边栏打开D ...
- fjwc2019 D4T1 循环流
#187. 「2019冬令营提高组」循环流 假的网络流,其实是O(1)算法 手画n个图后,你会发现只要分成几种情况讨论讨论就得了. 当$a==1$时显然不存在. 当$a!=1$时 如果$n==2$,显 ...
- bzoj5421:收藏家
bzoj5421 贴一张图 关于对问题的转化: 当两个人交换收藏品时,显然我们进行这个操作是为了得到更优解. 那么一个收藏品是有用的,另一个被换走的收藏品可以当做直接扔掉了. 所以只要保留一个就可以了 ...
- get与post需要注意的几点 (转)
get与post需要注意的几点 在面试或者笔试时,经常会被问到 HTTP 方法中 get 和 post 的异同点.本文简单整理归纳了一下,以备忘. 1."get/post" VS ...