poj 1149 pigs ---- 最大流
题意以及分析:http://ycool.com/post/zhhrrm6#rule3
主要是建图,简化图,然后在套最大流的模板。
#include <iostream>
#include<string.h>
#include<cstdio>
using namespace std; struct Node
{
int v,cap,flow,next; Node(){}
Node(int _v,int _cap,int _flow,int _next)
{
v=_v;
cap=_cap;
flow=_flow;
next=_next;
}
}; const int INF=;
Node edges[];
int pig[],a[][];
int n,m,s,t,head[],e; void Add(int u,int v,int cap)
{
edges[e]=Node(v,cap,,head[u]);
head[u]=e++;
edges[e]=Node(u,,,head[v]);
head[v]=e++;
} int num[],h[],curedge[],pre[]; int Maxflow(int s,int t,int n)
{
int ans=,i,k,x,d,u; memset(num,,sizeof(num));
memset(h,,sizeof(h));
for(i=;i<=n;i++) curedge[i]=head[i];
num[n]=n;u=s;
while(h[u]<n)
{
if(u==t)
{
d=INF+;
for(i=s;i!=t;i=edges[curedge[i]].v) if(d>edges[curedge[i]].cap)
k=i,d=edges[curedge[i]].cap;
for(i=s;i!=t;i=edges[curedge[i]].v)
{
x=curedge[i];
edges[x].cap-=d;
edges[x].flow+=d;
edges[x^].cap+=d;
edges[x^].flow-=d;
}
ans+=d;u=k;
}
for(i=curedge[u];i!=-;i=edges[i].next) if(edges[i].cap>&&h[u]==h[edges[i].v]+)
break;
if(i!=-)
{
curedge[u]=i;
pre[edges[i].v]=u;
u=edges[i].v;
}
else
{
if(--num[h[u]]==) break;
curedge[u]=head[u];
for(x=n,i=head[u];i!=-;i=edges[i].next) if(edges[i].cap>&&h[edges[i].v]<x)
x=h[edges[i].v];
h[u]=x+;num[h[u]]++;
if(u!=s) u=pre[u];
}
}
return ans;
} int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
int i,j,x,p,num; s=;t=n+;
memset(head,-,sizeof(head));
e=;
for(i=;i<=m;i++) scanf("%d",&pig[i]);
for(i=;i<=m;i++) a[i][]=;
for(i=;i<=n;i++)
{
scanf("%d",&x);
while(x--) scanf("%d",&p),a[p][++a[p][]]=i;
scanf("%d",&num);
Add(i,t,num);
}
for(i=;i<=m;i++) if(a[i][]) Add(s,a[i][],pig[i]);
for(i=;i<=m;i++) for(j=;j<a[i][];j++) Add(a[i][j],a[i][j+],INF);
printf("%d\n",Maxflow(s,t,t));
}
return ;
}
poj 1149 pigs ---- 最大流的更多相关文章
- POJ 1149 - PIGS - [最大流构图]
Time Limit: 1000MS Memory Limit: 10000K Description Mirko works on a pig farm that consists of M loc ...
- poj 1149 pigs(最大流)
题目大意:迈克在农场工作,农场有 m 个猪舍,每个猪舍有若干只猪,但是迈克不能打开任何一间猪舍.有 n 个顾客前来购买,每个顾客有最大的购买数量,每个顾客可以购买某些猪舍的猪,且顾客可以打开这些猪舍, ...
- [poj] 1149 PIGS || 最大流经典题目
原题 题目大意 给你m个猪圈以及每个猪圈里原来有多少头猪,先后给你n个人,每个人能打开一些猪圈并且他们最多想买Ki头猪,在每一个人买完后能将打开的猪圈中的猪顺意分配在这次打开猪圈里,在下一个人来之前 ...
- 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: 10000KB This problem will be judged on PKU. 64-bit integer(整数) ...
- POJ 1149 PIGS(最大流)
Description Mirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlock an ...
- poj 1149 PIGS【最大流经典建图】
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18727 Accepted: 8508 Description ...
- poj 1149 PIGS(最大流经典构图)
题目描述:迈克在一个养猪场工作,养猪场里有M 个猪圈,每个猪圈都上了锁.由于迈克没有钥匙,所以他不能打开任何一个猪圈.要买猪的顾客一个接一个来到养猪场,每个顾客有一些猪圈的钥匙,而且他们要买一定数量的 ...
随机推荐
- 【巧妙】【3-21个人赛】Problem C 01串
Problem C Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Sub ...
- 怎么在一个list集合里面筛选重复的数据,在重复的数据中取最后添加的那条数据
1.先将集合进行分组(分组字段)2.在判断分组的数量是否大于 03.大于0,则有重复的数据
- Java Math的 floor,round和ceil的总结
floor 返回不大于的最大整数 round 则是4舍5入的计算,入的时候是到大于它的整数round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下 ...
- week 与 strong区别 精辟的解释
转:http://stackoverflow.com/questions/9262535/explanation-of-strong-and-weak-storage-in-ios5 觉得讲的很容易理 ...
- iOS开发之基于parse的登录注册
基本上现在的每一款app都有登录功能.那也就少不了注册,找回密码等操作. 今天要说的就是初学者可以使用parse做为后台的服务器来进行一系列的操作,等以后工作的时候可以用公司的服务器. 注册用户 Bm ...
- html 父容器和子容器通信
通过拿到document对象下的window对象后执行对应的方法.
- BZOJ 3307: 雨天的尾巴( LCA + 线段树合并 )
路径(x, y) +z : u处+z, v处+z, lca(u,v)处-z, fa(lca)处-z, 然后dfs一遍, 用线段树合并. O(M log M + M log N). 复杂度看起来不高, ...
- Java多线程并发编程之原子变量与非阻塞同步机制
1.非阻塞算法 非阻塞算法属于并发算法,它们可以安全地派生它们的线程,不通过锁定派生,而是通过低级的原子性的硬件原生形式 -- 例如比较和交换.非阻塞算法的设计与实现极为困难,但是它们能够提供更好的吞 ...
- tcp窗口滑动以及拥塞控制
转自:http://blog.chinaunix.net/uid-26275986-id-4109679.html TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥 ...
- EditText默认不弹出软键盘
#EditText默认不弹出软键盘# 网上关于EditText默认情况下不弹出软键盘,当手触摸到EditText,获取焦点时候,才会弹出软键盘,貌似都不能用,其实,在oncreate()方法中,加上 ...