博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P1402 酒店之王(二分图)
阅读量:4949 次
发布时间:2019-06-11

本文共 2219 字,大约阅读时间需要 7 分钟。

P1402 酒店之王

题目描述

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

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

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

输入输出格式

输入格式:

 

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

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

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

 

输出格式:

 

最大的顾客满意数。

 

输入输出样例

输入样例#1:
2 2 21 01 01 11 1
输出样例#1:
1
/*其实很简单,做两个二分图即可。可以构造两个二分图,依次从某一个客人出发同时对两个二分图寻找增广路若对某一个二分图没有找到增广路,则恢复从该客人出发找到的所有增广路(这条不行),反之,则改进匹配。*/#include
#include
#include
#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

你可能感兴趣的文章
用ctrl+鼠标滚动调节字体大小
查看>>
查数据库有哪些表、查数据库
查看>>
使用git上传github遇到的问题
查看>>
静态页面菜单栏布局整改使用iframeset
查看>>
图解HTTP学习笔记——简单的HTTP协议
查看>>
Java Finally
查看>>
卑鄙的外乡人——公共知识与共有知识
查看>>
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。...
查看>>
Spring中的Advisor,Advice,Pointcut
查看>>
20165223 实验二 面向对象程序设计
查看>>
30岁前不要让人生留下遗憾笔记
查看>>
如何注册EPIMATE
查看>>
交易进行中买家申请退货退款操作流程
查看>>
常用技巧之JS判断数组中某元素出现次数
查看>>
Oracle命令:授权-收回权限-角色-用户状态
查看>>
云打码识别验证码
查看>>
在Kafka中使用Avro编码消息:Producter篇
查看>>
分布式跟踪调研与设计
查看>>
解读python中SocketServer源码
查看>>
node 渲染html模板配置
查看>>