题意:Emmy在一个养猪场工作。这个养猪场有M个锁着的猪圈,但Emmy并没有钥匙。

顾客会到养猪场来买猪,一个接着一个。每一位顾客都会有一些猪圈的钥匙,他们会将这些猪圈打开并买走固定数目的猪。

所有顾客有的钥匙和他们需要买猪的数量在事先都告诉了Emmy,于是Emmy要订一个计划,使得卖出去的猪最多。

买卖的过程是这样的:一个顾客前来,并打开所有他可以打开的猪圈。

然后Emmy从这些猪圈里牵出固定数目的猪卖给顾客(最多只能和顾客需要数相等),并可以重新安排这些开着的猪圈中的猪。

每个猪圈可以存放任意数目的猪。 写一个程序,使得Emmy能够卖出去尽可能多的猪。

1 ≤ M ≤ 1000
1 ≤ N ≤ 100

思路:RYZ作业

考虑到如果有两个人拥有同一个猪圈的钥匙,则前一个人可以分配任意(不能超过他自己能拿到上限)数量的猪给后一个人

前一个人——>后一个人 OO

又发现他们之间不用全部两两连边,只需要按到来顺序,相邻连边

猪圈其实就是从源点出来的容量上限

源点——>某猪圈第一个人 a[i]

最后还有每个人购买的限制

每个人——>汇点 b[i]

也是网络流经典模型之一

  1. var head,vet,next,len,dis,gap,fan:array[..]of longint;
  2. a,last:array[..]of longint;
  3. m,n,i,j,x,y,z,tot,s,source,src:longint;
  4.  
  5. procedure add(a,b,c:longint);
  6. begin
  7. inc(tot);
  8. next[tot]:=head[a];
  9. vet[tot]:=b;
  10. len[tot]:=c;
  11. head[a]:=tot;
  12.  
  13. inc(tot);
  14. next[tot]:=head[b];
  15. vet[tot]:=a;
  16. len[tot]:=;
  17. head[b]:=tot;
  18. end;
  19.  
  20. function min(x,y:longint):longint;
  21. begin
  22. if x<y then exit(x);
  23. exit(y);
  24. end;
  25.  
  26. function dfs(u,aug:longint):longint;
  27. var e,v,t,flow,val:longint;
  28. begin
  29. if u=src then exit(aug);
  30. e:=head[u]; flow:=; val:=s-;
  31. while e<> do
  32. begin
  33. v:=vet[e];
  34. if len[e]> then
  35. begin
  36. if dis[u]=dis[v]+ then
  37. begin
  38. t:=dfs(v,min(len[e],aug-flow));
  39. len[e]:=len[e]-t;
  40. len[fan[e]]:=len[fan[e]]+t;
  41. flow:=flow+t;
  42. if dis[source]>=s then exit(flow);
  43. if aug=flow then break;
  44. end;
  45. val:=min(val,dis[v]);
  46. end;
  47. e:=next[e];
  48. end;
  49. if flow= then
  50. begin
  51. dec(gap[dis[u]]);
  52. if gap[dis[u]]= then dis[source]:=s;
  53. dis[u]:=val+;
  54. inc(gap[dis[u]]);
  55. end;
  56. exit(flow);
  57. end;
  58.  
  59. function maxflow:longint;
  60. var ans:longint;
  61. begin
  62. fillchar(gap,sizeof(gap),);
  63. fillchar(dis,sizeof(dis),);
  64. gap[]:=s; ans:=;
  65. while dis[source]<s do ans:=ans+dfs(source,maxlongint);
  66. exit(ans);
  67. end;
  68.  
  69. begin
  70. assign(input,'bzoj1280.in'); reset(input);
  71. assign(output,'bzoj1280.out'); rewrite(output);
  72. readln(m,n);
  73. for i:= to m do read(a[i]);
  74. for i:= to do
  75. if i and = then fan[i]:=i+
  76. else fan[i]:=i-;
  77. source:=n+; src:=n+; s:=n+;
  78. for i:= to n do
  79. begin
  80. read(x);
  81. for j:= to x do
  82. begin
  83. read(y);
  84. if last[y]= then
  85. begin
  86. add(source,i,a[y]);
  87. last[y]:=i;
  88. end
  89. else
  90. begin
  91. add(last[y],i,maxlongint);
  92. last[y]:=i;
  93. end;
  94. end;
  95. read(z);
  96. add(i,src,z);
  97. end;
  98. writeln(maxflow);
  99. close(input);
  100. close(output);
  101. end.

【POJ1149&BZOJ1280】PIGS(最大流)的更多相关文章

  1. 【BZOJ1280】Emmy卖猪pigs 最大流

    [BZOJ1280]Emmy卖猪pigs Description Emmy在一个养猪场工作.这个养猪场有M个锁着的猪圈,但Emmy并没有钥匙.顾客会到养猪场来买猪,一个接着一个.每一位顾客都会有一些猪 ...

  2. POJ1149 PIGS [最大流 建图]

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20662   Accepted: 9435 Description ...

  3. poj1149 PIGS 最大流(神奇的建图)

    一开始不看题解,建图出错了.后来发现是题目理解错了.  if Mirko wants, he can redistribute the remaining pigs across the unlock ...

  4. POJ1149 PIGS(最大流)

    题意:       有一个人,他有m个猪圈,每个猪圈里面有一定数量的猪,但是每个猪圈的门都是锁着的,他自己没有钥匙,只有顾客有钥匙,一天依次来了n个顾客,(记住是依次来的)他们每个人都有一些钥匙,和他 ...

  5. POJ 1149 - PIGS - [最大流构图]

    Time Limit: 1000MS Memory Limit: 10000K Description Mirko works on a pig farm that consists of M loc ...

  6. poj 1149 pigs ---- 最大流

    题意以及分析:http://ycool.com/post/zhhrrm6#rule3 主要是建图,简化图,然后在套最大流的模板. #include <iostream> #include& ...

  7. PIGS(最大流)

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18742   Accepted: 8511 Description ...

  8. POJ1149:PIGS——题解

    http://poj.org/problem?id=1149 题目大意: Mirko有M个猪圈和N个客户,猪圈里有特定数量的猪,每个客户按照顺序来买猪,他们只能打开他们能打开的猪圈,然后取走一些猪(上 ...

  9. 【poj1149】 pigs 网络流最大流问题

    描述 Description 尼克在一家养猪场工作,这家养猪场共有M间锁起来的猪舍,由于猪舍的钥匙都给了客户,所以尼克没有办法打开这些猪舍,客户们从早上开始一个接一个来购买生猪,他们到达后首先用手中的 ...

随机推荐

  1. 23中java设计模式(1)-- 策略模式

    近来不太忙,就打算抽空看下源码补充一下知识,当我看了之后我发现看源码的关键是要弄清楚类之家的关系以及为何要这样的关系,否则如果只看具体的代码那不如去学习会儿算法. 于是就打算从设计模式入手,边学习边记 ...

  2. 关于HashMap中hash()函数的思考

    关于HashMap中hash()函数的思考 JDK7中hash函数的实现   static int hash(int h) { h ^= (h >>> 20) ^ (h >&g ...

  3. [BZOJ1040][ZJOI2008]骑士 基环树DP

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1040 题目给出了$n$个点和$n$条无向边,即一棵基环树或者基环树森林. 如果题目给的关系 ...

  4. Ubuntu docker 使用命令 系列二

    1.下载官方远程仓下的镜像:sudo docker pull <docker 镜像> ,sudo docker pull centos (没有指定版本,就是下载的最新的os) 2. 下载某 ...

  5. app自动化配置信息

    caps={    "platformName":"Android",#平台名称    "platformVersion":"6. ...

  6. Redux 和 mobx的区别

    Redux: Redux将数据保存在单一store中,Mobx将数据保存在分散的多个store中 Redux需要手动处理变化后的操作,Mobx使用observable保存数据,数据变化后自动处理响应的 ...

  7. Format a Hard Drive in Csharp

    Article Author(s): Audric Thevenet All Rights Reserved. Here's how to format hard drives, floppies, ...

  8. CPP-STL:list容器

    本文以List容器为例子,介绍了STL的基本内容,从容器到迭代器,再到普通函数,而且例子丰富,通俗易懂.不失为STL的入门文章,新手不容错过! 目录 1 定义一个list 2 使用list的成员函数p ...

  9. 苹果平台上的媒体流播放技术HLS

    近日在和朋友聊起媒体流的服务器端实时转码技术的时候,发现苹果的各种终端上的视频播放并未使用常见的基于UDP的RTSP/RTP,而强制使用了Http Live Stream技术,这里稍稍总结了如下. 苹 ...

  10. [LUOGU] P2187 小Z的笔记

    看范围猜方程,应该是O(n)级别的 f[i]表示前i个合法的最小代价,转移需要枚举断点位置,O(n^2) f[i]表示前i个合法留下的最大个数,同时更新距离最近的26个字母的位置,O(n)转移 f[i ...