PIGS
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 20421   Accepted: 9320

Description

Mirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlock any pighouse because he doesn't have the keys. Customers come to the farm one after another. Each of them has keys to some pig-houses and wants to buy a certain number of pigs.
All data concerning customers planning to visit the farm on that particular day are available to Mirko early in the morning so that he can make a sales-plan in order to maximize the number of pigs sold.
More precisely, the procedure is as following: the customer arrives, opens all pig-houses to which he has the key, Mirko sells a certain number of pigs from all the unlocked pig-houses to him, and, if Mirko wants, he can redistribute the remaining pigs across the unlocked pig-houses.
An unlimited number of pigs can be placed in every pig-house.
Write a program that will find the maximum number of pigs that he can sell on that day.

Input

The first line of input contains two integers M and N, 1 <= M <= 1000, 1 <= N <= 100, number of pighouses and number of customers. Pig houses are numbered from 1 to M and customers are numbered from 1 to N.
The next line contains M integeres, for each pig-house initial number of pigs. The number of pigs in each pig-house is greater or equal to 0 and less or equal to 1000.
The next N lines contains records about the customers in the following form ( record about the i-th customer is written in the (i+2)-th line):
A K1 K2 ... KA B It means that this customer has key to the pig-houses marked with the numbers K1, K2, ..., KA (sorted nondecreasingly ) and that he wants to buy B pigs. Numbers A and B can be equal to 0.

Output

The first and only line of the output should contain the number of sold pigs.

Sample Input

3 3
3 1 10
2 1 2 2
2 1 3 3
1 2 6

Sample Output

7

题目连接:http://poj.org/problem?id=1149

题意:有m个猪圈,n个顾客。下一行输入m个猪圈里面猪的数量。接下来n行,每一行输入a,k1,k2,……,ka,b。表示这个顾客拥有ki猪圈的钥匙,他最多买的猪的数量b。开始时,猪圈是关着的,顾客来购买时,打开所有顾客自己能打开的猪圈,Mirko从中选一些猪卖给顾客,Mirko可以重新分配被打开的猪圈里面的猪。顾客离开后,猪圈关闭。问Mirko最多卖掉多少头猪。

思路:注意因为可以重新分配猪圈里面的猪,网络流的最大流。设置一个源点0和一个汇点n+1,顾客是其他节点。顾客j紧跟在顾客i之后打开某个猪圈,则边<i,j>的容量是+∞。如果某个猪圈是顾客j第一个打开则边<0,j>的容量是这个猪圈的数量。边<j,n+1>的容量是b。

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;
const int MAXN=1e2+,INF=1e7+;
struct Edge
{
int c,f,g;
} edge[MAXN][MAXN];
int path[MAXN],flow[MAXN];
int sum[];
int sign[];
queue<int>q;
int bfs(int Start,int End)
{
int u,v;
memset(path,-,sizeof(path));
memset(flow,,sizeof(flow));
while(!q.empty()) q.pop();
path[Start]=;
flow[Start]=INF;
q.push(Start);
while(!q.empty())
{
u=q.front();
q.pop();
if(u==End) break;
for(v=Start; v<=End; v++)
{
if(v!=Start&&path[v]==-&&edge[u][v].g)
{
path[v]=u;
flow[v]=flow[u]<edge[u][v].g?flow[u]:edge[u][v].g;
q.push(v);
}
}
}
return flow[End];
}
int ford(int Start,int End)
{
int max_flow=,pre,now,step;
while((step=bfs(Start,End))!=)
{
max_flow+=step;
now=End;
while(now!=Start)
{
pre=path[now];
edge[pre][now].g-=step;
edge[now][pre].g+=step;
now=pre;
}
}
return max_flow;
}
int main()
{
int i,m,n;
while(~scanf("%d%d",&m,&n))
{
for(i=; i<=m; i++) scanf("%d",&sum[i]);
for(i=; i<=n; i++)
{
int a,k,b;
scanf("%d",&a);
while(a--)
{
scanf("%d",&k);
if(sign[k]==)
edge[sign[k]][i].c+=sum[k];
else edge[sign[k]][i].c=INF;
edge[sign[k]][i].g=edge[sign[k]][i].c;
sign[k]=i;
}
scanf("%d",&b);
edge[i][n+].g=edge[i][n+].c=b;
}
int Start=,End=n+;
printf("%d\n",ford(Start,End));
}
return ;
}

最大流

												

POJ 1149PIGS 网络流 最大流的更多相关文章

  1. POJ 1273 网络流(最大流)模板

    http://poj.org/problem?id=1273 这道题很值得反思,弄了一下午,交上去先是一直编译错误,而在本地运行没有问题, 原因可能是oj的编译器版本老旧不支持这样的写法 G[from ...

  2. POJ 1459-Power Network(网络流-最大流-ISAP)C++

    Power Network 时间限制: 1 Sec  内存限制: 128 MB 题目描述 A power network consists of nodes (power stations, cons ...

  3. [POJ1273][USACO4.2]Drainage Ditches (网络流最大流)

    题意 网络流最大流模板 思路 EK也不会超时 所以说是一个数据比较水的模板题 但是POJ有点坑,多组数据,而且题目没给 哭得我AC率直掉 代码 用的朴素Dinic #include<cstdio ...

  4. HDU 3081 Marriage Match II (网络流,最大流,二分,并查集)

    HDU 3081 Marriage Match II (网络流,最大流,二分,并查集) Description Presumably, you all have known the question ...

  5. HDU1532 网络流最大流【EK算法】(模板题)

    <题目链接> 题目大意: 一个农夫他家的农田每次下雨都会被淹,所以这个农夫就修建了排水系统,还聪明的给每个排水管道设置了最大流量:首先输入两个数n,m ;n为排水管道的数量,m为节点的数量 ...

  6. Redraw Beautiful Drawings(hdu4888)网络流+最大流

    Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...

  7. A simple Gaussian elimination problem.(hdu4975)网络流+最大流

    A simple Gaussian elimination problem. Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65 ...

  8. 【bzoj3130】[Sdoi2013]费用流 二分+网络流最大流

    题目描述 Alice和Bob做游戏,给出一张有向图表示运输网络,Alice先给Bob一种最大流方案,然后Bob在所有边上分配总和等于P的非负费用.Alice希望总费用尽量小,而Bob希望总费用尽量大. ...

  9. 【bzoj1822】[JSOI2010]Frozen Nova 冷冻波 计算几何+二分+网络流最大流

    题目描述 WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵.我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线 ...

随机推荐

  1. 1219 spring3 项目总结

    Spring3 项目总结 列志华 (组长) http://www.cnblogs.com/liezhihua/ 团队guihub https://github.com/LWHTF/OrderingFo ...

  2. NHibernate系列文章二十二:NHibernate查询之HQL查询(附程序下载)

    摘要 NHibernate提供了多种查询方式,最早的HQL语言查询.Criteria查询和SQL Query,到NHibernate 3.0的Linq NHibernate,NHIbernate 4. ...

  3. 常见HTTP状态码(200、301、302、500等)

    HTTP状态码,它是用以表示网页服务器HTTP响应状态的3位数字代码.状态码的第一个数字代表了响应的五种状态之一. 1XX系列:指定客户端应相应的某些动作,代表请求已被接受,需要继续处理.由于 HTT ...

  4. linux下jdk和tomcat的安装配置

    操作系统:centos (32bit) 1.  下载合适的安装包. 原则是:安装包类型和(bit)位数要与操作系统一致,tomcat和jdk的版本要兼容,如: apache-tomcat-6.0.37 ...

  5. ssh访问控制,多次失败登录即封掉IP,防止暴力破解

    ssh访问控制,多次失败登录即封掉IP,防止暴力破解 一.系统:Centos6.3 64位 二.方法:读取/var/log/secure,查找关键字 Failed,例如(注:文中的IP地址特意做了删减 ...

  6. 发现大量的TIME_WAIT解决办法

    存在一定的TIME_WAIT是正常的,个人认为如果超过了连接数的比例就不是很正常 服务器端与客户端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口状态变为TIME_WAIT.主动关闭的一方 ...

  7. 缓存工具CacheUtil - 并发环境的缓存值存取

    缓存工具CacheUtil - 并发环境的缓存值存取 目的 适合并发环境的缓存值存取 读取缓存值时,只需关注数据来源.不用再关注将源数据存入缓存等后续处理. 应用程序N次读取数据时,数据源读取一次,缓 ...

  8. linux yum下载RPM包后再安装LAMP环境

    1.下载yum插件 yum-downloadonly,实现只下载软件包的功能. yum install yum-downloadonly 或者 yum install yum install yum- ...

  9. apk添加系统签名

    上一节,可以通过添加su的方式获取系统权限,但这种存在安全隐患,故不推荐,本文通过获取数字签名方式获取系统权限. 在我们的AndroidManifest.xml中添加    android:share ...

  10. A股各概念板块龙头股大全

    A股各概念板块龙头股大全一.新兴信息产业龙头 1.车联网龙头——软控股份002073 启明信息002232.荣之联002642 2.通信网络龙头——恒宝股份002104 3.通信设备制造龙头——新海宜 ...