【题解】 Luogu P1402 酒店之王 (二分图匹配)
Solution:
- 这题没想到这么水,就是两个二分图而已
- 如果房间的二分图没匹配成功就直接进入下一个人
- 如果房间的二分图匹配成功,食物二分图匹配不成功就把房间的\(be[ ]\)数组还原,避免对后面匹配产生影响
- 都成功就直接\(Ans++\)就可以了,可能数据太水,感觉常数很大都过了
我才不会告诉你这道题目据说在洛谷有三倍经验
Code:
//It is coded by Ning_Mew on 3.18
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e2+7;
int n,p,q,ans=0;
int be[maxn],Be[maxn],pre[maxn];
bool vis[maxn];
int head[maxn],cnt=0;
int Head[maxn],Cnt=0;
struct ED{
int nxt,to;
}edge[maxn*maxn],Edge[maxn*maxn];
//edge -> room ; Edge -> food
void add(int from,int to,int num){
if(num==1){
edge[++cnt].nxt=head[from];
edge[cnt].to=to;
head[from]=cnt;
}
else{
Edge[++Cnt].nxt=Head[from];
Edge[Cnt].to=to;
Head[from]=Cnt;
}
}
//find1 -> room ; find2 -> food
bool find1(int k){
for(int i=head[k];i!=0;i=edge[i].nxt){
int v=edge[i].to;
if(!vis[v]){
vis[v]=true;
if(be[v]==-1||find1(be[v])){be[v]=k;return true;}
}
}return false;
}
bool find2(int k){
for(int i=Head[k];i!=0;i=Edge[i].nxt){
int v=Edge[i].to;
if(!vis[v]){
vis[v]=true;
if(Be[v]==-1||find2(Be[v])){Be[v]=k;return true;}
}
}return false;
}
int main(){
scanf("%d%d%d",&n,&p,&q);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
int box;scanf("%d",&box);
if(box)add(i,j,1);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
int box;scanf("%d",&box);
if(box)add(i,j,2);
}
}
memset(be,-1,sizeof(be));
memset(Be,-1,sizeof(Be));
for(int i=1;i<=n;i++){
memset(vis,false,sizeof(vis));
for(int j=1;j<=n;j++)pre[j]=be[j];
if(find1(i));else{continue;}
memset(vis,false,sizeof(vis));
if(find2(i))ans++;
else{for(int j=1;j<=n;j++)be[j]=pre[j];}
}
printf("%d\n",ans);
return 0;
}
【题解】 Luogu P1402 酒店之王 (二分图匹配)的更多相关文章
- 洛谷P1402 酒店之王(二分图)
P1402 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只 ...
- BZOJ 1711 吃饭dining/Luogu P1402 酒店之王 拆点+最大流流匹配
题意: (吃饭dining)有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料.现在有n头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表,问最多能使几头牛同时享 ...
- luogu P1402 酒店之王
题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜. ...
- 【luogu P1402 酒店之王】 题解
题目链接:https://www.luogu.org/problemnew/show/P1402 菜 #include <queue> #include <cstdio> #i ...
- LUOGU P1402 酒店之王 (网络流)
解题思路 应该比较显然得能看出这是个网络流,将$S$与房间连边,房间与人连边,人与菜连边,菜与汇点连边,边的流量均为1.但这样是错误的,因为有可能一个人跑过去2的流量,所以要将人拆点限流. #incl ...
- 洛谷P2891 Dining P1402 酒店之王【类二分图匹配】题解+代码
洛谷P2891 Dining P1402 酒店之王[类二分图匹配]题解+代码 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的 ...
- Luogu 1402 酒店之王(二分图最大匹配)
Luogu 1402 酒店之王(二分图最大匹配) Description XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自 ...
- P1402 酒店之王【网络流】【最大流】
P1402 酒店之王 提交 5.39k 通过 2.16k 时间限制 1.00s 内存限制 125.00MB 题目提供者yeszy 难度省选/NOI- 历史分数100 提交记录 查看题解 标签 福建省历 ...
- P1402 酒店之王
P1402 酒店之王 每个人要匹配一个A和一个B,所以这样连边: S向每个房间连边. 每个房间向喜欢这个房间的人连边. 每个人向喜欢的菜连边. 每道菜向T连边. 边权均为1. 注意人要限流. // I ...
随机推荐
- 01-Maven功能特点
1.Maven简介 2.Maven重要性 3.Maven原理
- 蜻蜓fm面试
一面: 面试官首先看简历上写了在腾讯的实习,然后就探讨了半天,各种虚拟化的技术.... 说完之后,估计都半小时过去了,然后就又说了一下你用什么语言,你做的东西都比较偏底层呢,然后你对工作有什么要求吗? ...
- 2017-2018-2 『网络对抗技术』Exp2:后门原理与实践
1. 后门原理与实践实验说明及预备知识 一.实验说明 任务一:使用netcat获取主机操作Shell,cron启动 (0.5分) 任务二:使用socat获取主机操作Shell, 任务计划启动 (0.5 ...
- 2017-2018-2 20155315《网络对抗技术》Exp6 :信息搜集与漏洞扫描
实验目的 进行信息搜集的工作,为实战做准备 教程 实验内容 外围信息搜集 NMAP OpenVAS 实验步骤 (一)各种搜索技巧的应用 实战的前提是进行信息搜索.当我们想要有针对地进行操作的时候,就要 ...
- python 回溯法 子集树模板 系列 —— 12、选排问题
问题 从n个元素中挑选m个元素进行排列,每个元素最多可重复r次.其中m∈[2,n],r∈[1,m]. 如:从4个元素中挑选3个元素进行排列,每个元素最多可重复r次. 分析 解x的长度是固定的,为m. ...
- vector 去重
1.使用unique函数: sort(v.begin(),v.end()); v.erase(unique(v.begin(), v.end()), v.end()); //unique()函数将重复 ...
- idea 项目java版本选项位置
藏这里了 还有一个
- vue中v-if 和 v-show的区别
简单来说,v-if 的初始化较快,但切换代价高:v-show 初始化慢,但切换成本低 1.共同点 v-if 和 v-show 都可以动态地显示DOM元素 2.区别 (1)手段: v-if 是动态的向D ...
- 程序员大佬推荐的java学习路线
作为我的第一篇博客,我第一个想到的就是在校时就看到的这篇文章.并且在之后的时间里自己都反复观看过,有时候这不单单是一篇学习路线,也是审视自己技术能力的里程碑,和激励自己的鞭挞绳. 先来个书籍清单: & ...
- MFC学习笔记(一): 不用MFC向导如何新建一个MFC程序
使用Visual Studio新建一个空项目,项目命名为HelloMFC,完成后,打开项目属性页面,将配置属性选项卡中的常规项打开,将其中的MFC的使用属性栏改为:在静态库中使用MFC或者在共享DLL ...