洛谷P1402 酒店之王(二分图)
P1402 酒店之王
题目描述
XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化。由于很多来住店的旅客有自己喜好的房间色调、阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜。
有一天来了n个客人,每个客人说出了自己喜欢哪些房间,喜欢哪道菜。但是很不幸,可能做不到让所有顾客满意(满意的条件是住进喜欢的房间,吃到喜欢的菜)。
这里要怎么分配,能使最多顾客满意呢?
输入输出格式
输入格式:
第一行给出三个正整数表示n,p,q(<=100)。
之后n行,每行p个数包含0或1,第i个数表示喜不喜欢第i个房间(1表示喜欢,0表示不喜欢)。
之后n行,每行q个数,表示喜不喜欢第i道菜。
输出格式:
最大的顾客满意数。
输入输出样例
2 2 2 1 0 1 0 1 1 1 1
1
/* 其实很简单,做两个二分图即可。 可以构造两个二分图,依次从某一个客人出发同时对两个二分图寻找增广路 若对某一个二分图没有找到增广路,则恢复从该客人出发找到的所有增广路(这条不行), 反之,则改进匹配。 */ #include<iostream> #include<cstdio> #include<cstring> #define N 101using namespace std; int n,p,q,i,j,RL[N][N],FL[N][N],LB[N],book[N],answer,eat[N]; bool CR[N],visR[N],visF[N],LCR[N],CF[N];bool room_(int No) {for (int i=1; i<=n; i++)if (RL[No][i]&&!visR[i]){visR[i]=1;if (book[i]==0||room_(book[i])){CR[No]=1;book[i]=No;return 1;}}return 0; }bool food_(int No) {for (int i=1; i<=n; i++)if (FL[No][i]&&!visF[i]){visF[i]=1;if (eat[i]==0||food_(eat[i])){CF[No]=1;eat[i]=No;return 1;}}return 0; }int main () {scanf("%d%d%d",&n,&p,&q);for (i=1; i<=n; i++)for (j=1; j<=p; j++)scanf("%d",&RL[i][j]);for (i=1; i<=n; i++)for (j=1; j<=q; j++)scanf("%d",&FL[i][j]);while (1){for (i=1; i<=n; i++)if (!CR[i]){for (j=1; j<=n; j++) visR[j]=0;for (j=1; j<=n; j++) visF[j]=0;for (j=1; j<=n; j++) LCR[j]=CR[j];for (j=1; j<=n; j++) LB[j]=book[j];if (room_(i)&&food_(i)){answer++;continue;}else//因为无法匹配所以取消上次所有增广 {for (j=1; j<=n; j++) CR[j]=LCR[j];for (j=1; j<=n; j++) book[j]=LB[j];}}break;}printf("%d\n",answer);return 0;return 0;return 0; }
转载于:https://www.cnblogs.com/L-Memory/p/7326616.html
洛谷P1402 酒店之王(二分图)相关推荐
- 洛谷 P1402 酒店之王
题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜. ...
- [洛谷P1402] 酒店之王
洛谷连接:酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有 ...
- 洛谷P1402 酒店之王--网络流最大流拆点
题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜. ...
- 洛谷P1402 酒店之王
传送门:>Here< 题意:有N个人去酒店,酒店共有P个房间,Q道菜.已知每个人喜欢特定的几个房间和几道菜,一个人是满意的当且仅当住了喜欢的房间,吃了喜欢的菜(一个人只能选一个房间一道菜) ...
- 洛谷 5061 秘密任务——二分图染色
题目:https://www.luogu.org/problemnew/show/P5061 就是建出补图来,二分图染色. 做DP,f[ i ]表示一个队里人数是否能达到 i 人.如果图合法,能达到 ...
- 洛谷P1640 连续攻击游戏 二分图匹配
给出n≤1e6n\leq1e6n≤1e6个装备,每个装备都有两个属性值,它的范围一定在[1,10000][1,10000][1,10000],你每个装备只能选择一个属性值,然后要求出最长的一段从111 ...
- 洛谷:P1129 [ZJOI2007] 矩阵游戏(二分图最大匹配)
洛谷:矩阵游戏 洛谷题解就挺好 目的是使得最终(1,1)(2,2)-(n,n)都有一个点 可以看作为,最终状态需要每 i 行和 i 列都存在一个匹配 建图方式:对于 i 行 j 列的1点,建一条 i ...
- (二分图)洛谷P2071座位安排
洛谷P2071座位安排 思路: 网络流难在建图上面. 这题(应该也可以,我没尝试过)用二分图匹配去跑.可以拆点,将一排的座位拆成两个点,一个iii,一个i+ni+ni+n,然后匈牙利算法跑. 也可以用 ...
- 洛谷P3386:网络流之二分图匹配,最大流算法
二分图:我的理解是,对图中的点集,可分为两个集合U和V,使得两个集合之间存在通路,且集合内部不存在通路.如上图. 匹配:两两不含公共端点的边集合M 最大匹配:边数最多的匹配 完美匹配:最大匹配的匹配数 ...
最新文章
- DIV + CSS布局的一些知识汇总
- Srinath总结 架构师们遵循的 30 条设计原则
- 的 while循环_十八、Python图解while循环
- xxl-job使用实例
- Eclipse搭建Android开发环境(安装ADT,Android4.4.2)
- WORD给文档设置密码保护?
- 新手学java 学哪方面_初学者学Java应从哪些方面学习?
- 必须放在特定的文件夹中才能运行的Python程序
- 关于缓存穿透,缓存击穿,缓存雪崩,热点数据失效问题的解决方案
- (转载)高光谱数据读取by multibandread函数
- gpt和mbr用来装服务器系统,给win10分区用MBR还是GPT?详解MBR还是GPT的区别
- ONOS 南向抽象层分析
- scum服务器里找不到车,人渣SCUM车辆机制介绍 人渣SCUM车辆为什么消失
- Re-ID Driven Localization Refinement for Person Search
- Pytorch 运行加速
- 在Android运行cocos Demo游戏
- 【001】机器学习基础-凸优化基础
- 统计学:描述性统计分析
- Linux虚拟机配置网络代理配置yum源
- libinput驱动触摸屏支持