POJ 1149 网络流最大流 解题报告
来源:互联网 发布:小工具源码 编辑:程序博客网 时间:2024/06/07 12:10
PIGS
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
【解题报告】(转载自网络流建模汇by Edelweiss )
代码如下:
#include<cstdio> #include<cstring> #include<string>#include<algorithm>#include<map>#include<queue> #include<vector>using namespace std; #define inf 0x3f3f3f3f #define maxv 10005#define maxe 100005 int nume=0,head[maxv],e[maxe][3];void inline adde(int i,int j,int c) { e[nume][0]=j;e[nume][1]=head[i];head[i]=nume; e[nume++][2]=c; e[nume][0]=i;e[nume][1]=head[j];head[j]=nume; e[nume++][2]=0; } int ss,tt,n,m; int vis[maxv],lev[maxv]; bool bfs() { for(int i=0;i<maxv;i++) vis[i]=lev[i]=0; queue<int>q; q.push(ss); vis[ss]=1; while(!q.empty()) { int cur=q.front(); q.pop(); for(int i=head[cur];i!=-1;i=e[i][1]) { int v=e[i][0]; if(!vis[v]&&e[i][2]>0) { lev[v]=lev[cur]+1; vis[v]=1; q.push(v); } } } return vis[tt]; } int dfs(int u,int minf) { if(u==tt||minf==0)return minf; int sumf=0,f; for(int i=head[u];i!=-1&&minf;i=e[i][1]) { int v=e[i][0]; if(lev[v]==lev[u]+1&&e[i][2]>0) { f=dfs(v,minf<e[i][2]?minf:e[i][2]); e[i][2]-=f;e[i^1][2]+=f; sumf+=f;minf-=f; } } if(!sumf) lev[u]=-1; return sumf; } int Dinic() { int sum=0; while(bfs())sum+=dfs(ss,inf); return sum; } vector<int>a[200];int pig[1005];int L[1005];int main(){ memset(head,-1,sizeof(head)); scanf("%d%d",&m,&n); ss=0,tt=n+1; for(int i=1;i<=m;++i) scanf("%d",&pig[i]); for(int i=1;i<=n;++i) { int x,y; scanf("%d",&x); while(x--) { scanf("%d",&y); a[i].push_back(y); } scanf("%d",&y); adde(i,tt,y); } for(int i=1;i<=n;i++) for(int j=0;j<a[i].size();j++) { int v=a[i][j]; if(!L[v]) { L[v]=i; adde(ss,i,pig[v]); } else { adde(L[v],i,inf); L[v]=i; } } printf("%d\n",Dinic()); return 0;}
让我看到你们的双手
- POJ 1149 网络流最大流 解题报告
- POJ 3281 网络流最大流 解题报告
- HDU 3572 网络流最大流 解题报告
- ZOJ 3348 网络流最大流 解题报告
- SPOJ 287 网络流最大流+二分答案 解题报告
- SPOJ IM 962 网络流最大流 解题报告
- 【POJ 2396】 Budget 带上下界网络流 解题报告
- POJ 3422 Kaka's Matrix Travels 解题报告(最大费用最大流)
- POJ 1149 解题报告
- Power Network之网络流解题报告
- codevs 1907 解题报告 网络流
- POJ 2239 Selecting Courses(二分图匹配——匈牙利算法||网络流)解题报告
- POJ 1637 网络流判混合欧拉回路 解题报告
- poj 1149 PIGS 最大网络流
- POJ--1149--PIGS【网络最大流】
- poj 1149 PIGS 【网络最大流】
- POJ 1149 PIGS (网络最大流 Dinic)
- POJ 1149 PIGS 解题报告
- socket多进程TCP通信
- 项目总结-管理收尾
- Object.keys方法
- 论java的重要性
- 我的第一个Android程序
- POJ 1149 网络流最大流 解题报告
- App实战节选-购物车
- 读《JAVA 编程及其应用》【英文版】
- 摄像机
- Eclipse R文件不见
- QML之Flow流式布局
- jQuery 获取 attr() 与 prop() 属性值的方法及区别介绍
- 今日小程序推荐:天天码图-极乐小程序商店
- 简单自定义view拖拽--桃先森