【Luogu】P1402 酒店之王 题解
这道题,很明显是个配对问题。于是,我们可以想到用网络最大流来做。
先整理一下题目条件。
- 很明显,根据贪心思想,要使最多人满意,每个人应该最多睡一个房间(似乎也没有人能睡两个房间),吃一道菜。这就要求一个人最多与一个房间、一道菜配对。
- 每个人必须住进喜欢的房间且吃到喜欢的菜才算满意。
- 每道菜至多让1个人吃,每个房间至多让1个人睡。
于是,我们得出了建图的几大原则:
- 菜与房间分别作为一个点。
- 为了保证条件1,每个人应该拆成2个点,并在这两个点之间连一条容量为1的边。
- 为了保证条件2,应该让每一个人拆成的第一个点与所有自己喜欢的房间对应的点连一条容量为1的边,让每一个人拆成的第二个点与所有自己喜欢的菜对应的点连一条容量为1的边。
- 为了保证条件3,应该让源点\(s\)向所有的房间连一条容量为1的边,所有的菜向汇点\(t\)连一条容量为1的边。
放一张对应的图(样例):

最后EK跑最大流即可。
Code(超级精简,不到60行):
#include <bits/stdc++.h>
using namespace std;
int n,p,q,head[10005],tot=-1,st,ed,flow[10005],pre[10005],maxflow,vis[10005];
const int INF=0x3f3f3f3f;queue<int> qq;
struct Edge{int to,nxt,flow;}e[200005];
void addedge(int x,int y,int f){
e[++tot].to=y;e[tot].nxt=head[x];e[tot].flow=f;head[x]=tot;
e[++tot].to=x;e[tot].nxt=head[y];e[tot].flow=0;head[y]=tot;
}
bool bfs(){
memset(vis,0,sizeof(vis));memset(flow,0,sizeof(flow));flow[st]=INF;
while(!qq.empty()) qq.pop();
qq.push(st);vis[st]=1;
while(!qq.empty()){
int x=qq.front();qq.pop();
for(int i=head[x],y;i!=-1;i=e[i].nxt){
if(e[i].flow>0){
y=e[i].to;
if(vis[y]) continue;
flow[y]=min(flow[x],e[i].flow);pre[y]=i;
vis[y]=1;qq.push(y);
if(y==ed) return 1;
}
}
}
return 0;
}
void doit(){
while(bfs()){
int tmp=ed;maxflow+=flow[ed];
while(tmp!=st){
e[pre[tmp]].flow-=flow[ed],e[pre[tmp]^1].flow+=flow[ed];
tmp=e[pre[tmp]^1].to;
}
}
}
int main(){
memset(head,-1,sizeof(head));
scanf("%d%d%d",&n,&p,&q);
st=0,ed=2*n+p+q+1;
for(int i=1;i<=n;i++){
addedge(i+p,i+n+p,1);
for(int j=1;j<=p;j++){
int x;scanf("%d",&x);
if(x) addedge(j,i+p,1);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=q;j++){
int x;scanf("%d",&x);
if(x) addedge(i+p+n,n*2+p+j,1);
}
}
for(int i=1;i<=p;i++) addedge(st,i,1);
for(int i=1;i<=q;i++) addedge(i+n*2+p,ed,1);
doit();printf("%d\n",maxflow);
return 0;
}
【Luogu】P1402 酒店之王 题解的更多相关文章
- luogu P1402 酒店之王
题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜. ...
- BZOJ 1711 吃饭dining/Luogu P1402 酒店之王 拆点+最大流流匹配
题意: (吃饭dining)有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料.现在有n头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表,问最多能使几头牛同时享 ...
- 【luogu P1402 酒店之王】 题解
题目链接:https://www.luogu.org/problemnew/show/P1402 菜 #include <queue> #include <cstdio> #i ...
- 【题解】 Luogu P1402 酒店之王 (二分图匹配)
懒得复制,原题目戳我 Solution: 这题没想到这么水,就是两个二分图而已 如果房间的二分图没匹配成功就直接进入下一个人 如果房间的二分图匹配成功,食物二分图匹配不成功就把房间的\(be[ ]\) ...
- LUOGU P1402 酒店之王 (网络流)
解题思路 应该比较显然得能看出这是个网络流,将$S$与房间连边,房间与人连边,人与菜连边,菜与汇点连边,边的流量均为1.但这样是错误的,因为有可能一个人跑过去2的流量,所以要将人拆点限流. #incl ...
- 洛谷P2891 Dining P1402 酒店之王【类二分图匹配】题解+代码
洛谷P2891 Dining P1402 酒店之王[类二分图匹配]题解+代码 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的 ...
- P1402 酒店之王【网络流】【最大流】
P1402 酒店之王 提交 5.39k 通过 2.16k 时间限制 1.00s 内存限制 125.00MB 题目提供者yeszy 难度省选/NOI- 历史分数100 提交记录 查看题解 标签 福建省历 ...
- Luogu 1402 酒店之王(二分图最大匹配)
Luogu 1402 酒店之王(二分图最大匹配) Description XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自 ...
- P1402 酒店之王
P1402 酒店之王 每个人要匹配一个A和一个B,所以这样连边: S向每个房间连边. 每个房间向喜欢这个房间的人连边. 每个人向喜欢的菜连边. 每道菜向T连边. 边权均为1. 注意人要限流. // I ...
随机推荐
- Lua table(表)
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组.字典等. Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil. Lua ta ...
- 《kubernetes + .net core 》dev ops部分
目录 1.kubernetes 预备知识 1.1 集群资源 1.1.1 role 1.1.2 namespace 1.1.3 node 1.1.4 persistent volume 1.1.5 st ...
- Arduino 串口的一些高级用法
来源: 1.配置串口通信数据位.校验位.停止位 通常我们使用Serial.begin(speed)来完成串口的初始化,这种方式,只能配置串口的波特率. 而使用Serial.begin(speed, c ...
- Tensorflow学习笔记No.1
使用tf.keras.Sequential()建立网络模型 整个过程可分为五步:1创建Sequential模型,2添加所需要的神经层,3使用.compile方法确定模型训练结构,4使用.fit方法 使 ...
- 开始在Windows上开发Android
介绍 鉴于您正在阅读这篇文章,您很可能已经知道android是什么了.可能.在科幻小说和电影中,机器人本质上是具有拟人化特征的机器人.还记得<星球大战>里的C-3PO吗?那<星际迷航 ...
- 手写一个HTTP框架:两个类实现基本的IoC功能
jsoncat: 仿 Spring Boot 但不同于 Spring Boot 的一个轻量级的 HTTP 框架 国庆节的时候,我就已经把 jsoncat 的 IoC 功能给写了,具体可以看这篇文章&l ...
- 发布MeteoInfo Java 1.2.2
主要更新了MeteoInfoLab至0.2版,已经有一些实用功能了,这里做些简单的介绍. 下载地址1,MeteoInfo网站:http://www.meteothinker.com/下载地址2,百度云 ...
- linux查看登录用户
[root@localhost ~]# w 11:01:06 up 3 days, 12:40, 1 user, load average: 0.00, 0.01, 0.05 USER TTY FRO ...
- Spark如何进行动态资源分配
一.操作场景 对于Spark应用来说,资源是影响Spark应用执行效率的一个重要因素.当一个长期运行的服务,若分配给它多个Executor,可是却没有任何任务分配给它,而此时有其他的应用却资源紧张,这 ...
- MVC注册
前言 最近没什么写的,写个MVC注册巩固一下 HTML @{ Layout = null; } <!DOCTYPE html> <html> <head> < ...