建图:s向所有猪圈的第一个顾客连流量为这个猪圈里住的数量,然后对于之后每个来这个猪圈的顾客,由他前一个顾客向他连边权为无穷的边,然后每个顾客向t连流量为这个顾客购买上限的边。然后跑最大流

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<vector>
  4. #include<cstring>
  5. #include<queue>
  6. using namespace std;
  7. const int M=1005,N=105,inf=1e8;;
  8. int m,n,a[M],b[N],s,t,h[N],cnt=1,le[N];
  9. vector<int>v[M];
  10. struct qwe
  11. {
  12. int ne,to,v;
  13. }e[N*N<<1];
  14. int read()
  15. {
  16. int r=0,f=1;
  17. char p=getchar();
  18. while(p>'9'||p<'0')
  19. {
  20. if(p=='-')
  21. f=-1;
  22. p=getchar();
  23. }
  24. while(p<='9'&&p>='0')
  25. {
  26. r=r*10+p-48;
  27. p=getchar();
  28. }
  29. return r*f;
  30. }
  31. void add(int u,int v,int w)
  32. {
  33. cnt++;
  34. e[cnt].ne=h[u];
  35. e[cnt].to=v;
  36. e[cnt].v=w;
  37. h[u]=cnt;
  38. }
  39. void ins(int u,int v,int w)
  40. {
  41. add(u,v,w);
  42. add(v,u,0);
  43. }
  44. bool bfs()
  45. {
  46. queue<int>q;
  47. memset(le,0,sizeof(le));
  48. q.push(s);
  49. le[s]=1;
  50. while(!q.empty())
  51. {
  52. int u=q.front();
  53. q.pop();
  54. for(int i=h[u];i;i=e[i].ne)
  55. if(e[i].v>0&&!le[e[i].to])
  56. {
  57. le[e[i].to]=le[u]+1;
  58. q.push(e[i].to);
  59. }
  60. }
  61. return le[t];
  62. }
  63. int dfs(int u,int f)
  64. {
  65. if(u==t||!f)
  66. return f;
  67. int us=0;
  68. for(int i=h[u];i;i=e[i].ne)
  69. if(e[i].v>0&&le[e[i].to]==le[u]+1)
  70. {
  71. int t=dfs(e[i].to,min(e[i].v,f-us));
  72. e[i].v-=t;
  73. e[i^1].v+=t;
  74. us+=t;
  75. }
  76. if(us==0)
  77. le[u]=0;
  78. return us;
  79. }
  80. int dinic()
  81. {
  82. int re=0;
  83. while(bfs())
  84. re+=dfs(s,inf);
  85. return re;
  86. }
  87. int main()
  88. {
  89. m=read(),n=read();
  90. s=0,t=n+1;
  91. for(int i=1;i<=m;i++)
  92. a[i]=read();
  93. for(int i=1;i<=n;i++)
  94. {
  95. int x=read();
  96. for(int j=1;j<=x;j++)
  97. {
  98. int y=read();
  99. v[y].push_back(i);
  100. }
  101. b[i]=read();
  102. ins(i,t,b[i]);
  103. }
  104. for(int i=1;i<=m;i++)
  105. if(v[i].size())
  106. {
  107. ins(s,v[i][0],a[i]);
  108. for(int j=1;j<v[i].size();j++)
  109. ins(v[i][j-1],v[i][j],inf);
  110. }
  111. printf("%d\n",dinic());
  112. return 0;
  113. }

poj 1149 PIGS【最大流】的更多相关文章

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

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

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

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

  3. poj 1149 pigs(最大流)

    题目大意:迈克在农场工作,农场有 m 个猪舍,每个猪舍有若干只猪,但是迈克不能打开任何一间猪舍.有 n 个顾客前来购买,每个顾客有最大的购买数量,每个顾客可以购买某些猪舍的猪,且顾客可以打开这些猪舍, ...

  4. [poj] 1149 PIGS || 最大流经典题目

    原题 题目大意 给你m个猪圈以及每个猪圈里原来有多少头猪,先后给你n个人,每个人能打开一些猪圈并且他们最多想买Ki头猪,在每一个人买完后能将打开的猪圈中的猪顺意分配在这次打开猪圈里,在下一个人来之前 ...

  5. POJ 1149 PIGS(Dinic最大流)

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20738   Accepted: 9481 Description ...

  6. poj 1149 Pigs 网络流-最大流 建图的题目(明天更新)-已更新

    题目大意:是有M个猪圈,N个顾客,顾客要买猪,神奇的是顾客有一些猪圈的钥匙而主人MIRKO却没有钥匙,多么神奇?顾客可以在打开的猪圈购买任意数量的猪,只要猪圈里有足够数量的猪.而且当顾客打开猪圈后mi ...

  7. 网络流(最大流):POJ 1149 PIGS

    PIGS Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. 64-bit integer(整数) ...

  8. POJ 1149 PIGS(最大流)

    Description Mirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlock an ...

  9. poj 1149 PIGS【最大流经典建图】

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18727   Accepted: 8508 Description ...

  10. poj 1149 PIGS(最大流经典构图)

    题目描述:迈克在一个养猪场工作,养猪场里有M 个猪圈,每个猪圈都上了锁.由于迈克没有钥匙,所以他不能打开任何一个猪圈.要买猪的顾客一个接一个来到养猪场,每个顾客有一些猪圈的钥匙,而且他们要买一定数量的 ...

随机推荐

  1. Assigning to "id<CALayerDelegate> _Nullable" from incompatible type "ZXCapture *const __strong" 的警告提示信息

    该警告提示信息,是说,设置了代理对象,但是并没有继承它的代理.下图中,可以看出,警告信息提示我们没有继承“CALayerDelegate”的代理. 解决方法,很简单,(在 @interface 文件中 ...

  2. 洛谷——P1951 收费站_NOI导刊2009提高(2)

    https://www.luogu.org/problem/show?pid=1951 题目描述 在某个遥远的国家里,有n个城市.编号为1,2,3,…,n. 这个国家的政府修建了m条双向的公路.每条公 ...

  3. Junit中Assert.assertEquals()和Assert.assertSame方法有什么异同

    1)提供的接口数量不完全相同.assertEquals支持boolean,long,int等等java primitiveType变量.assertSame只支持Object. 2)比较的逻辑不同,结 ...

  4. Android中传递对象的三种方法

    Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! Android中,Activity和Fragment之间传递对象,可以通过将对象序列化并存入Bundle或者I ...

  5. Hadoop架构设计、执行原理具体解释

    1.Map-Reduce的逻辑过程 如果我们须要处理一批有关天气的数据.其格式例如以下: 依照ASCII码存储.每行一条记录 每一行字符从0開始计数,第15个到第18个字符为年 第25个到第29个字符 ...

  6. Java基础实例

    打印等腰三角形代码 public class ForForTest{ public static void main(String []args){ for(int x=0;x<5;x++){ ...

  7. MySQL基础笔记(五) 视图

    一.什么是视图 视图是一个虚拟表.也就是说,视图在外观和行为上都类似于表,但它不需要实际的物理存储,只保存了视图定义(查询语句). 视图由select查询所定义 -- 当创建一个视图时,实际上是在数据 ...

  8. CRF图像切割简单介绍

    这里主要是讲Conditional Random Fields(CRF)用于pixel-wise的图像标记(事实上就是图像切割).CRF经经常使用于 pixel-wise的label 预測.当把像素的 ...

  9. IO流(SequenceInputStream序列流--文件拆分与合并)

    一.文件拆分 1.将一个文件按照规定的大小进行分割成多个文件并将被分割详细信息保存至配置信息中 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载,属性列表 ...

  10. RFC函数设置外部断点