酒店之王 luogu-1402
题目大意:有n个人,p道菜,q个房间,每个人喜欢吃一些菜、喜欢住一些房间,如果一个人即住到了他喜欢的房间有吃到了他喜欢的菜,就对答案贡献++,求最大贡献。
注释:1<=n,p,q<=100.
想法:网络流第二题,和上一题相比有一条比较重要的限制就是每个人最多只能对答案贡献1,所以,我们对于一个相同的人加两个相同的节点,之间的流量为1。第一个人联想喜欢的菜,第二个人连向喜欢的房间,所有的菜指向源点,所有的菜指向汇点。这样每一个从源点到汇点的完整流必定为1且满足题意。
最后,附上丑陋的代码... ...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#define inf 0x7f7f7f7f
using namespace std;
typedef long long ll;
int head[51000],to[101000],nxt[101000],tot=1,dis[51000],all;
int f[101000];
inline void add(int x,int y,int z)
{
to[++tot]=y;
f[tot]=z;
nxt[tot]=head[x];
head[x]=tot;
}
bool bfs()
{
queue<int>q;
memset(dis,-1,sizeof dis);
while(!q.empty()) q.pop();
q.push(1);dis[1]=0;
while(!q.empty())
{
int x=q.front();q.pop();
for(int i=head[x];i;i=nxt[i])if(f[i]&&dis[to[i]]==-1)
{
dis[to[i]]=dis[x]+1;
q.push(to[i]);
if(to[i]==all) return true;
}
}
return false;
}
int dinic(int x,int flow)
{
int a,temp=flow;
if(x==all) return flow;
for(int i=head[x];i;i=nxt[i])
{
if(f[i]>0&&dis[to[i]]==dis[x]+1)
{
a=dinic(to[i],min(f[i],temp));
if(a==0) dis[to[i]]=-1;
temp-=a;
f[i]-=a;
f[i^1]+=a;
if(temp==0) break;
}
}
return flow-temp;
}
int main()
{
int n,p,q;
cin >> n >> p >> q;
all=1+p+2*n+q+1;
// cout << all << endl;
for(int i=1;i<=p;i++)
{
add(1,i+1,1);
add(i+1,1,0);
}
// puts("Fuck1");
for(int a,i=1;i<=n;i++)
{
for(int j=1;j<=p;j++)
{
cin >> a;
if(a)
{
add(1+j,1+p+i,1);
add(1+p+i,1+j,0);
}
else
{
add(1+j,1+p+i,0);
add(1+p+i,1+j,0);
}
}
}
// puts("Fuck2");
for(int i=1;i<=n;++i)
{
add(1+p+i,1+p+n+i,1);
add(1+p+n+i,1+p+i,0);
}
// puts("Fuck3");
for(int a,i=1;i<=n;i++)
{
for(int j=1;j<=q;j++)
{
cin >> a;
if(a)
{
add(1+p+n+i,1+p+2*n+j,1);
add(1+p+2*n+j,1+p+n+i,0);
}
else
{
add(1+p+n+i,1+p+2*n+j,0);
add(1+p+2*n+j,1+p+n+i,0);
}
}
}
// puts("Fuck4");
for(int i=1;i<=q;i++)
{
add(1+p+2*n+i,all,1);
add(all,1+p+2*n+i,0);
}
ll ans=0;
// puts("Fuck5");
while(bfs())
{
// puts("Fuck6");
ans+=dinic(1,inf);
}
printf("%lld\n",ans);
return 0;
}
小结:这个技巧非常重要。
[luogu1402]酒店之王_网络流的更多相关文章
-
luogu1402 酒店之王
题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜. ...
-
P1402 酒店之王【网络流】【最大流】
P1402 酒店之王 提交 5.39k 通过 2.16k 时间限制 1.00s 内存限制 125.00MB 题目提供者yeszy 难度省选/NOI- 历史分数100 提交记录 查看题解 标签 福建省历 ...
-
洛谷P1402 酒店之王(网络流)
### 洛谷P1402 题目链接 ### 题目大意:有 n 个人, p 间房间,q 种食物.每个人喜欢一些房间,一些食物,但每间房间.每种食物只能分配给一个人.问最大可以让多少个人满足(当且仅当分配到 ...
-
P1402 酒店之王 网络流
大水题,我自己瞎做就做出来了,没啥说的,zz建图,就是板子. 题干: 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等, ...
-
[Luogu 1402] 酒店之王
题目 Description XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有 ...
-
【刷题】洛谷 P1402 酒店之王
题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜. ...
-
luogu P1402 酒店之王
题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜. ...
-
BZOJ 1711 吃饭dining/Luogu P1402 酒店之王 拆点+最大流流匹配
题意: (吃饭dining)有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料.现在有n头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表,问最多能使几头牛同时享 ...
-
「洛谷P1402」酒店之王 解题报告
P1402 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只 ...
随机推荐
-
收集的在线图片压缩(jpg/png)
http://www.yasuotu.com/ http://www.jpegmini.com/ http://www.tumiaoya.com/ https://tinypng.com/(推荐) h ...
-
django的安装和搭建
一.先下载pyton,配置下python的环境变量,这个很重要,然后下载django,解压到与python同一个根目录底下,进入django目录,运行python setup.py install安装 ...
-
Kafka 消息存储及检索(作者:杜亦舒)
Kafka 消息存储及检索 原创 2016-02-29 杜亦舒 性能与架构 Kafka是一个分布式的消息队列系统,消息存储在集群服务器的硬盘Kafka中可以创建多个消息队列,称为topic,消息的生产 ...
-
汉诺塔算法的递归与非递归的C以及C++源代码
汉诺塔(又称河内塔)问题其实是印度的一个古老的传说. 开天辟地的神勃拉玛(和中国的盘古差不多的神吧)在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一 个小, ...
-
初识XML及简单工厂运用--网络电视精灵
网络电视精灵 任务描述 1. 解析XML文件中的数据 三个简单的xml文件; <?xml version="1.0" encoding="utf-8" ? ...
-
网站搭建中,怎么区分ASP和PHP
1:空间支持上 ASP:程序要求比较低,空间只要支持ASP+access即可运行 PHP:配置要求比较高,空间需要支持PHP及数据库,而且程序和数据库是单独的,一般的 unix空间都是这种配置. 2: ...
-
清北学堂 清北-Day5-R2-xor
有 $ n $ 个物品,每个物品有两个属性 $ a_i,b_i $ ,挑选出若干物品,使得这些物品 $ a_i $ 的异或和 $ x \le m \(.问在这一限制下,\) b_i $ 的总和最大可能 ...
-
AnyConnect无法与指定的安全网关建立连接(转)
原文:https://www.cnblogs.com/dumuqiao/p/4020547.html Cisco的VPN客户端最近报“AnyConnect was not able to establ ...
-
Perl爬虫的简单实现
由于工作中有个项目需要爬取第三方网站的内容,所以在Linux下使用Perl写了个简单的爬虫. 相关工具 1. HttpWatch/浏览器开发人员工具 一般情况下这个工具是用不到的,但是如果你发现要爬取 ...
-
逆向工程-对native层的一次简单逆向实践
关注一款app很久了,这款app为了防止别人逆向破解拉取数据做了很多工作: 防止别人修改apk包,执行关键动作时对dex文件进行md5验证: 防止用户调用接口批量拉数据,对返回的web网页里个人信息进 ...