P1402 酒店之王

题目描述

XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化。由于很多来住店的旅客有自己喜好的房间色调、阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜。

有一天来了n个客人,每个客人说出了自己喜欢哪些房间,喜欢哪道菜。但是很不幸,可能做不到让所有顾客满意(满意的条件是住进喜欢的房间,吃到喜欢的菜)。

这里要怎么分配,能使最多顾客满意呢?

输入输出格式

输入格式:

第一行给出三个正整数表示n,p,q(<=100)。

之后n行,每行p个数包含0或1,第i个数表示喜不喜欢第i个房间(1表示喜欢,0表示不喜欢)。

之后n行,每行q个数,表示喜不喜欢第i道菜。

输出格式:

最大的顾客满意数。

输入输出样例

输入样例#1:

2 2 2
1 0
1 0
1 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 酒店之王(二分图)相关推荐

  1. 洛谷 P1402 酒店之王

    题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜. ...

  2. [洛谷P1402] 酒店之王

    洛谷连接:酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有 ...

  3. 洛谷P1402 酒店之王--网络流最大流拆点

    题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜. ...

  4. 洛谷P1402 酒店之王

    传送门:>Here< 题意:有N个人去酒店,酒店共有P个房间,Q道菜.已知每个人喜欢特定的几个房间和几道菜,一个人是满意的当且仅当住了喜欢的房间,吃了喜欢的菜(一个人只能选一个房间一道菜) ...

  5. 洛谷 5061 秘密任务——二分图染色

    题目:https://www.luogu.org/problemnew/show/P5061 就是建出补图来,二分图染色. 做DP,f[ i ]表示一个队里人数是否能达到 i 人.如果图合法,能达到 ...

  6. 洛谷P1640 连续攻击游戏 二分图匹配

    给出n≤1e6n\leq1e6n≤1e6个装备,每个装备都有两个属性值,它的范围一定在[1,10000][1,10000][1,10000],你每个装备只能选择一个属性值,然后要求出最长的一段从111 ...

  7. 洛谷:P1129 [ZJOI2007] 矩阵游戏(二分图最大匹配)

    洛谷:矩阵游戏 洛谷题解就挺好 目的是使得最终(1,1)(2,2)-(n,n)都有一个点 可以看作为,最终状态需要每 i 行和 i 列都存在一个匹配 建图方式:对于 i 行 j 列的1点,建一条 i ...

  8. (二分图)洛谷P2071座位安排

    洛谷P2071座位安排 思路: 网络流难在建图上面. 这题(应该也可以,我没尝试过)用二分图匹配去跑.可以拆点,将一排的座位拆成两个点,一个iii,一个i+ni+ni+n,然后匈牙利算法跑. 也可以用 ...

  9. 洛谷P3386:网络流之二分图匹配,最大流算法

    二分图:我的理解是,对图中的点集,可分为两个集合U和V,使得两个集合之间存在通路,且集合内部不存在通路.如上图. 匹配:两两不含公共端点的边集合M 最大匹配:边数最多的匹配 完美匹配:最大匹配的匹配数 ...

最新文章

  1. DIV + CSS布局的一些知识汇总
  2. Srinath总结 架构师们遵循的 30 条设计原则
  3. 的 while循环_十八、Python图解while循环
  4. xxl-job使用实例
  5. Eclipse搭建Android开发环境(安装ADT,Android4.4.2)
  6. WORD给文档设置密码保护?
  7. 新手学java 学哪方面_初学者学Java应从哪些方面学习?
  8. 必须放在特定的文件夹中才能运行的Python程序
  9. 关于缓存穿透,缓存击穿,缓存雪崩,热点数据失效问题的解决方案
  10. (转载)高光谱数据读取by multibandread函数
  11. gpt和mbr用来装服务器系统,给win10分区用MBR还是GPT?详解MBR还是GPT的区别
  12. ONOS 南向抽象层分析
  13. scum服务器里找不到车,人渣SCUM车辆机制介绍 人渣SCUM车辆为什么消失
  14. Re-ID Driven Localization Refinement for Person Search
  15. Pytorch 运行加速
  16. 在Android运行cocos Demo游戏
  17. 【001】机器学习基础-凸优化基础
  18. 统计学:描述性统计分析
  19. Linux虚拟机配置网络代理配置yum源
  20. libinput驱动触摸屏支持

热门文章

  1. SSH,telnet终端中文显示乱码解决办法
  2. 关于socket和 jsp的几个问题
  3. 实战struts2——用户登录
  4. C++程序的内存布局
  5. golang中的big.Int
  6. 尚硅谷图解Java数据结构和算法一
  7. MySQL第12天:MySQL索引优化分析之性能优化案例实践
  8. 嵌入式中单任务程序典型架构
  9. Web的诞生和网络基础 | 读《图解HTTP》
  10. Mybatis3源码分析(05)-加载Configuration-加载MappedStatement