题目描述

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

第一眼二分图匹配,第二眼网络流
写二分图吧,短嘛
分别匹配菜和酒店,都link到了答案+1,否则不作处理(回归上一次匹配状态)
                        #include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
inline int read() {
int x=,f=;
char c=getchar();
while(c<''||c>'') c=getchar();
while(c<=''&&c>='') x=x*+c-'',c=getchar();
return x*f;
}
int n,p,q;
const int maxn = ;
int link[maxn];
struct node{
int v,next;
}edge[maxn];
int used[maxn],head[maxn],num;
inline void add_edge(int x,int y) {
edge[++num].v=y;edge[num].next=head[x];head[x]=num;
}
bool link1(int x,int f,bool flag) {
for(int i=head[x];i;i=edge[i].next) {
int v=edge[i].v;
if(flag&&v<=n+p)continue;
if(!flag&&v>n+p)continue;
if(used[v]!=f) {
used[v]=f;
if(!link[v]||link1(link[v],f,flag)) {
link[v]=x;
return true;
}
}
}
return ;
}
int tmp[maxn];
int main() {
n=read(),p=read(),q=read();
for(int i=;i<=n;++i) {
for(int j=;j<=p;++j) {
if(read())add_edge(i,n+j);
}
}
for(int i=;i<=n;++i) {
for(int j=;j<=q;++j) {
if(read())add_edge(i,n+p+j);
}
}
int ans=;
for(int i=;i<=n;++i) {
for(int j=n+;j<=n+p;++j) tmp[j]=link[j];
if(link1(i,i,)) {
if(link1(i,i,)) ans++;
else for(int j=n+;j<=n+p;++j)link[j]=tmp[j];
}
}
printf("%d\n",ans);
return ;
}

luogu P1402 酒店之王的更多相关文章

  1. BZOJ 1711 吃饭dining/Luogu P1402 酒店之王 拆点+最大流流匹配

    题意: (吃饭dining)有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料.现在有n头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表,问最多能使几头牛同时享 ...

  2. 【luogu P1402 酒店之王】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1402 菜 #include <queue> #include <cstdio> #i ...

  3. 【题解】 Luogu P1402 酒店之王 (二分图匹配)

    懒得复制,原题目戳我 Solution: 这题没想到这么水,就是两个二分图而已 如果房间的二分图没匹配成功就直接进入下一个人 如果房间的二分图匹配成功,食物二分图匹配不成功就把房间的\(be[ ]\) ...

  4. LUOGU P1402 酒店之王 (网络流)

    解题思路 应该比较显然得能看出这是个网络流,将$S$与房间连边,房间与人连边,人与菜连边,菜与汇点连边,边的流量均为1.但这样是错误的,因为有可能一个人跑过去2的流量,所以要将人拆点限流. #incl ...

  5. Luogu 1402 酒店之王(二分图最大匹配)

    Luogu 1402 酒店之王(二分图最大匹配) Description XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自 ...

  6. 洛谷P2891 Dining P1402 酒店之王【类二分图匹配】题解+代码

    洛谷P2891 Dining P1402 酒店之王[类二分图匹配]题解+代码 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的 ...

  7. P1402 酒店之王

    P1402 酒店之王 每个人要匹配一个A和一个B,所以这样连边: S向每个房间连边. 每个房间向喜欢这个房间的人连边. 每个人向喜欢的菜连边. 每道菜向T连边. 边权均为1. 注意人要限流. // I ...

  8. 洛谷P1402 酒店之王(二分图)

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

  9. P1402 酒店之王【网络流】【最大流】

    P1402 酒店之王 提交 5.39k 通过 2.16k 时间限制 1.00s 内存限制 125.00MB 题目提供者yeszy 难度省选/NOI- 历史分数100 提交记录 查看题解 标签 福建省历 ...

随机推荐

  1. Applied Nonparametric Statistics-lec6

    Ref: https://onlinecourses.science.psu.edu/stat464/print/book/export/html/8 前面都是对一两个样本的检查,现在考虑k个样本的情 ...

  2. 打印机增强软件pdfpro

     http://3dx.pc6.com/gm1/pdfpro.zip    

  3. lwqq

    源码安装lwqq 加密保存密码 发送截图

  4. 对java多线程的一些浅浅的理解

    作为一名JAVA初学者,前几天刚刚接触多线程这个东西,有了些微微的理解想写下来(不对的地方请多多包涵并指教哈). 多线程怎么写代码就不说了,一搜一大堆.说说多线程我认为最难搞的地方,就是来回释放锁以及 ...

  5. CodeForces 109C 树形DP Lucky Tree

    赶脚官方题解写得挺清楚的说,=_= 注意数据范围用long long,否则会溢出. #include <iostream> #include <cstdio> #include ...

  6. php msql 表单

    http://www.cnblogs.com/webers/p/3849707.html

  7. 评估后Vista时代系统内核模式安全性

    Windows Vista与之前的MS Windows版本(包括WindowsXPSP2)相比增加了很多的安全性.Vista新安全性的特征可以包括以下几个方面: 驱动签名 路径保护 内核模式代码完整性 ...

  8. Pycharm Django开发(一)设置开发环境

    一 由于我是一个对开发环境有强迫症的人,在装完PYTHON 2.6 3.3  3.4中,在创建Django工程的时候,会出现N个版本的python,那么在这里可以设置你喜欢和要使用的版本.

  9. [每日app二]月入60万多嘛?单词锁屏的潜力!

    抢了用户的时间,就是抢了用户的金钱! 单词锁屏,一个开发难度不太大,但仅仅360手机助手下载就是每周4万!拉风- 对于搞app的同学来说,搞个锁屏,还不是玩似的,但是要定位好,玩得好,那就有难度了.最 ...

  10. 大数据学习——spark笔记

    变量的定义 val a: Int = 1 var b = 2 方法和函数 区别:函数可以作为参数传递给方法 方法: def test(arg: Int): Int=>Int ={ 方法体 } v ...