题目描述

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

题解:直接把客户放在中间,建成房间->客户->食物这样一条流线,注意客户一定要拆点,因为客户只能对应一个房间和一个食物,不然根据网络流的性质会发生
如上图的情况,结果会为2,但答案是1,所以为了避免这种情况必须拆点,
这样保证了数据的准确性

AC代码

#include<iostream>
#include<string.h>
#include<queue>
#include<vector>
#include<stdio.h>
using namespace std;
struct Node{int v,next,w;
}edge[200000];
int head[20000],cnt;
void add_edge(int u,int v,int w)
{edge[cnt].v=v;edge[cnt].w=w;edge[cnt].next=head[u];head[u]=cnt++;
}
int n,m1,m2,s,t;
bool vis[20000];
int d[20000],cur[20000];
queue<int>q;
bool bfs()
{memset(d,0,sizeof(d));while(!q.empty())q.pop();d[s]=1;memset(vis,0,sizeof(vis));q.push(s);while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].v;int w=edge[i].w;if(d[v]||w==0)continue;d[v]=d[u]+1;q.push(v);}}if(d[t]>0)return true;return false;
}
int dfs(int u,int wx)
{if(u==t){return wx;}for(int i=cur[u];i!=-1;i=edge[i].next){int v=edge[i].v;int w=edge[i].w;if(w>0&&d[v]==d[u]+1){//   cout<<x<<" & "<<v<<" "<<w<<endl;int res=dfs(v,min(wx,w));vis[v]=false;edge[i].w-=res;edge[i^1].w+=res;if(res>0)return res;}}return 0;
}
int max_flow()
{int ans=0;while(bfs()){for(int i=1;i<=n;i++)cur[i]=head[i];while(int x=dfs(s,99999999))ans+=x;}return ans;
}
int main()
{cin>>n>>m1>>m2;memset(head,-1,sizeof(head));cnt=0;s=2*n+m1+m2+1;t=s+1;for(int i=1;i<=n;i++){add_edge(i,i+n,1);add_edge(i+n,i,0);}for(int i=1;i<=n;i++){for(int j=1;j<=m1;j++){int x;scanf("%d",&x);if(x==1){add_edge(2*n+j,i,1);add_edge(i,2*n+j,0);}}}for(int i=1;i<=n;i++){for(int j=1;j<=m2;j++){int x;scanf("%d",&x);if(x==1){add_edge(i+n,2*n+m1+j,1);add_edge(2*n+m1+j,i+n,0);}}}for(int i=1;i<=m1;i++){add_edge(s,2*n+i,1);add_edge(2*n+i,s,0);}for(int i=1;i<=m2;i++){add_edge(2*n+m1+i,t,1);add_edge(t,2*n+m1+i,0);}n=t;cout<<max_flow()<<endl;return 0;
}

洛谷P1402 酒店之王--网络流最大流拆点相关推荐

  1. 洛谷 P1402 酒店之王

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

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

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

  3. [洛谷P1402] 酒店之王

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

  4. 洛谷P1402 酒店之王

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

  5. 洛谷 P2053 [SCOI2007]修车 网络流 最小费用最大流 Dinic+Spfa

    题目链接: https://www.luogu.com.cn/problem/P2053 思路参考博客: https://www.luogu.com.cn/blog/a23333/solution-p ...

  6. 洛谷 - P2765 魔术球问题(最大流+残余网络上的最大流+路径打印)

    题目链接:点击查看 题目大意:给出n个柱子,问若按照规则摆放,最多能放多少个球,规则如下: 每次只能在某根柱子的最上面放球 在同一根柱子中,任何2个相邻球的编号之和为完全平方数 并输出方案 题目分析: ...

  7. 洛谷 - P2763 试题库问题(最大流+路径打印)

    题目链接:点击查看 题目大意:给出n种试题类型,以及m种试题,现在需要出题,要求每种类型的题目必须满足相应的数目,问应该怎么设计方案 题目分析:一开始其实就建好了图,然后就在怀疑自己建图的正确性,因为 ...

  8. [费用流]洛谷 P2053 修车(zkw费用流模版)

    题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待 ...

  9. 洛谷 P2071 座位安排 (最大流 + 建图)

    2020.7.15 今天先开个小差,这图书馆接近零下的气温给爷冻傻了,这还咋写题?马上回去了,练一练网络和tarjan吧. 这道题很简单,问有2n个人,n排座位,每个人都有喜欢的两个座位,最多能安置多 ...

最新文章

  1. 微软苹果服务器宕机,苹果服务器宕机,iPhone用户别做这两项操作,微软特斯拉也中招...
  2. iOS 设置所有UIButton的ExclusiveTouch属性为YES
  3. [原创].七段数码管驱动,Verilog版本
  4. java 中流的使用
  5. POJ - 3784 Running Median(动态维护中位数)
  6. 第4章 Python 数字图像处理(DIP) - 频率域滤波12 - 选择性滤波 - 带阻
  7. 剑指Offer - 面试题33. 二叉搜索树的后序遍历序列(递归)
  8. python 输入框查询_Element输入框带历史查询记录
  9. SEO(search engine optimization)搜索引擎优化
  10. 【小程序】当前“页面B”动态更改title,点击返回按钮,更改的标题会显示在“来源页面A”...
  11. m7405d粉盒清零方法_打印机清零方法总览
  12. java高级工程师认证考试_Java高级软件工程师人才缺口巨大
  13. 电脑重装系统后文件怎么恢复
  14. cpuid limit_Max CPUID Valut Limit 请懂电脑的解答下 谢谢!
  15. 1024程序员节是怎么来的?为什么设置程序员节?
  16. pnpm安装使用教程以及pnpm node版本管理以及EPERM operation not permitted symlink问题解决
  17. 360°全景影像移动端类库--PanoramaGL
  18. 中华成语宝典 xp v1.0.2 下载
  19. 【PC】【MTU】PC查看和修改MTU的方法小结
  20. 华为云cce生态环境搭建整理

热门文章

  1. 算法网课笔记(七)——排序
  2. Pycharm中如何下载自己想要的库!(超细教程)
  3. 儿童英语学习方法----读原版学英语
  4. 华为路由器端口映射hcna
  5. (学习笔记)微信小程序 -- WXML模板、WXSS样式、JS逻辑交互
  6. 一文告诉你大数据Flink是什么
  7. CS231n-2022 Module1: 神经网络3:Learning and Evaluation
  8. 10年程序员生涯带给了我什么?(2)
  9. 买本推荐惠普V3803TX
  10. 2017计算机考试程序改错步骤,计算机二级C++练习题:程序改错题