POJ 1149 PIGS 建图,最大流
题意:
你m个猪圈以及每个猪圈里原来有多少头猪,先后给你n个人,每个人能打开某一些猪圈并且他们最多想买Ki头猪,在每一个人买完后能将打开的猪圈中的猪顺意分配在这次打开猪圈里,在下一个人来之前 已打开的猪圈会被锁上。
问最多能卖几头猪
分析:
这个题明着想呢,肯定是要建N排点的,表示相同的猪圈的点连inf边,跑最大流的。
建那么多点肯定是会炸的。
在网络流中呢,如果我们做题的初步思路是最大流,那么肯定要将题目中问的直接问题抽象成水流,比如这道题,问最多的卖猪数,我们当然就要把猪的数量作为“流”,这是大家心照不宣的。
所谓建图呢?个人认为,网络流最终要的是“限制”二字,网络流的流量和连边就是一个个限制问题,所以我们要参透题目中给的限制问题,有时并不必要把图中的每一个关系都建边。
像这个题目中,猪圈里猪的数量是限制,每个人能打开的猪圈也是限制,买家的先后顺序也是限制,买猪的数量也是限制。所以我们只需要用这些限制构建模型,开始:
源点到每个猪圈来买的第一个人连一条容量为该猪圈里猪的数量的边(这个满足了第一、二个限制)
对于每个猪圈,第i个来买的人向第i+1个来买的人连一条容量为正无穷的边(这个满足了第三个限制)
每个人向汇点连一条容量为购买数量的边(这个满足了第四个限制)
网络流就是这样,严密合理得像一个故事一样。
一头猪,从猪圈出来经过几人之手最终被某个人买走,完成了他的使命。一单位流量从原点,流经一些人,最终流向汇点,也完成了它的使命。这边是对网络流的感性理解。
代码:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cmath>
#define ms(a,x) memset(a,x,sizeof(a))
using namespace std;
const int N=,M=,inf=1e9;
struct node{int y,z,nxt;}e[N*M*];
int n,m,S,T,pg[M],nw[M],c=;
int q[N],h[N],d[N],vis[N];
void add(int x,int y,int z){
e[++c]=(node){y,z,h[x]};h[x]=c;
e[++c]=(node){x,,h[y]};h[y]=c;
} bool bfs(){
int f=,t=;ms(d,-);
q[t++]=S;d[S]=;
while(f<t){
int x=q[f++];
for(int i=h[x],y;i;i=e[i].nxt)
if(d[y=e[i].y]==-&&e[i].z)
d[y]=d[x]+,q[t++]=y;
} return (d[T]!=-);
} int dfs(int x,int f){
if(x==T) return f;int w,tmp=;
for(int i=h[x],y;i;i=e[i].nxt)
if(d[y=e[i].y]==d[x]+&&e[i].z){
w=dfs(y,min(f-tmp,e[i].z));
if(!w) d[y]=-;
e[i].z-=w;e[i^].z+=w;
tmp+=w;if(tmp==f) return f;
} return tmp;
} int dinic(){
int tot=;
while(bfs()) tot+=dfs(S,inf);
return tot;
} int main(){
scanf("%d%d",&m,&n);S=;T=n+;
for(int i=;i<=m;i++)
scanf("%d",&pg[i]);
for(int i=;i<=n;i++){
int a,b,x;scanf("%d",&a);
while(a--){
scanf("%d",&x);
if(!nw[x]) add(S,i,pg[x]),nw[x]=i;
else add(nw[x],i,inf),nw[x]=i;
} scanf("%d",&b);add(i,T,b);
} printf("%d",dinic());
return ;
}
最大流
POJ 1149 PIGS 建图,最大流的更多相关文章
- POJ 1149 PIGS(Dinic最大流)
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20738 Accepted: 9481 Description ...
- poj 1149 Pigs 网络流-最大流 建图的题目(明天更新)-已更新
题目大意:是有M个猪圈,N个顾客,顾客要买猪,神奇的是顾客有一些猪圈的钥匙而主人MIRKO却没有钥匙,多么神奇?顾客可以在打开的猪圈购买任意数量的猪,只要猪圈里有足够数量的猪.而且当顾客打开猪圈后mi ...
- poj 1149 PIGS【最大流经典建图】
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18727 Accepted: 8508 Description ...
- POJ 1149 - PIGS - [最大流构图]
Time Limit: 1000MS Memory Limit: 10000K Description Mirko works on a pig farm that consists of M loc ...
- poj 1149 pigs ---- 最大流
题意以及分析:http://ycool.com/post/zhhrrm6#rule3 主要是建图,简化图,然后在套最大流的模板. #include <iostream> #include& ...
- poj 1149 PIGS【最大流】
建图:s向所有猪圈的第一个顾客连流量为这个猪圈里住的数量,然后对于之后每个来这个猪圈的顾客,由他前一个顾客向他连边权为无穷的边,然后每个顾客向t连流量为这个顾客购买上限的边.然后跑最大流 #inclu ...
- POJ 1149 PIGS 【最大流】
<题目链接> 题目大意:有一个养猪场,厂长没有钥匙,这个养猪场一共M个猪圈,N个顾客,每个顾客有一些猪圈的钥匙,每个顾客需要一些猪,问你厂长最多能卖多少猪?这里有个条件是,厂长可以在一个顾 ...
- POJ 1149 PIGS
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20579 Accepted: 9387 Description ...
- POJ 1149 PIGS (AC这道题很不容易啊)网络流
PIGS Description Mirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlo ...
随机推荐
- Java Socket实战之一:单线程通信
转自:http://developer.51cto.com/art/201202/317543.htm 现在做Java直接使用Socket的情况是越来越少,因为有很多的选择可选,比如说可以用sprin ...
- 搭建CARDBOARD+ANDROID+unity3d的VR开发环境
一.下载最新unity3d(u3d官网) 二.下载最新cardboardsdkforunity(https://github.com/googlesamples/cardboard-unity) 三. ...
- E20170524-gg
Awesome adj. 可怕的; 令人敬畏的; 使人畏惧的; 极好的;
- bzoj 1912: [Apio2010]patrol 巡逻【不是dp是枚举+堆】
我是智障系列.用了及其麻烦的方法= =其实树形sp就能解决 设直径长度+1为len(环长) 首先k=1,直接连直径两端就好,答案是2*n-len 然后对于k=2,正常人的做法是树形dp:先求直径,然后 ...
- Tensor Operation
Main operation categories that encompass the operations of tensors. Reshaping operations Element-wis ...
- element-ui公用模态框自定义样式与scoped样式生效问题解决方案
//先插如效果图 里面内容均为传进来的.包括取消与确定按钮,因为每个页面的绑定事件不一样. //下面这个图片为初始样式 //拖动模态框指令需要插件.详情看我下一篇,以下是地址 https://www. ...
- OKEX websocket API 连接Python范例
因为 websocket-client 新版的各种大脑降级设计 很多功能无法使用需要安装老版本websocket-client的包才能正常使用 pip3 install websocket-clien ...
- [USACO4.1]麦香牛块Beef McNuggets By cellur925
题目描述 农夫布朗的奶牛们正在进行斗争,因为它们听说麦当劳正在考虑引进一种新产品:麦香牛块.奶牛们正在想尽一切办法让这种可怕的设想泡汤.奶牛们进行斗争的策略之一是“劣质的包装”.“看,”奶牛们说,“如 ...
- Mybatis的全局配置文件标签介绍(mybatis-config.xml)
全局配置文件中本人只记录了常用的几个 typeHandlers, objectFactory,objectWrapperFactory, reflectorFactory, plugins, dat ...
- 【微信公众号开发】根据openId群发消息
根据开发文档可知,只要使用POST方式提交固定格式的json字符串到那个地址即可.这里我写的是最简单的文本 第一步:建立对应的实体类. package cn.sp.bean; import java. ...