[poj] 1149 PIGS || 最大流经典题目
2017-12-01 14:31
363 查看
原题
题目大意
给你m个猪圈以及每个猪圈里原来有多少头猪,先后给你n个人,每个人能打开一些猪圈并且他们最多想买Ki头猪,在每一个人买完后能将打开的猪圈中的猪顺意分配在这次打开猪圈里,在下一个人来之前 已打开的猪圈被锁上。
解析
以每个买猪的作为点,并建立原点和汇点。
每个猪圈的第一个访客和原点连一条该猪圈中猪数量的边,每个猪圈的访客(除了以第一个)和上一个访问这个猪圈的人连一条inf的边,每个人向汇点连一条最多买的数量的边。
#include<cstdio> #include<queue> #define N 1010 #define M 1010 #define inf 0x3f3f3f3f using namespace std; int deep ,head ,n,m,cnt=2,sum ,e[M] ,mx ,cur ,ans,a ; queue <int> q; struct hhh { int to,next,w; }edge[M*M]; int read() { int ans=0,fu=1; char j=getchar(); for (;(j<'0' || j>'9') && j!='-';j=getchar()) ; if (j=='-') j=getchar(),fu=-1; for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0'; return ans*fu; } void add(int u,int v,int w) { edge[cnt].to=v; edge[cnt].w=w; edge[cnt].next=head[u]; head[u]=cnt++; } bool bfs() { for (int i=0;i<=n+1;i++) cur[i]=head[i],deep[i]=-1; q.push(0); deep[0]=1; while(!q.empty()) { int r=q.front(); q.pop(); for (int i=head[r],v;i;i=edge[i].next) { v=edge[i].to; if (edge[i].w>0 && deep[v]==-1) { deep[v]=deep[r]+1; q.push(v); } } } if (deep[n+1]!=-1) return 1; return 0; } int dfs(int x,int f) { if (x==n+1) return f; int ha=0,now; for (int &i=cur[x],v;i;i=edge[i].next) { v=edge[i].to; if (edge[i].w>0 && deep[v]>deep[x]) { now=dfs(v,min(f-ha,edge[i].w)); if (now) { ha+=now; edge[i].w-=now; edge[i^1].w+=now; } } if (ha==f) return ha; } return ha; } int main() { m=read(); n=read(); for (int i=1;i<=m;i++) a[i]=read(); for (int i=1;i<=n;i++) { sum[i]=read(); for (int j=1,aa;j<=sum[i];j++) { aa=read(); e[aa][++e[aa][0]]=i; } mx[i]=read(); add(i,n+1,mx[i]); add(n+1,i,0); } for (int i=1;i<=m;i++) { if (e[i][0]) add(0,e[i][1],a[i]),add(e[i][1],0,0); for (int j=2;j<=e[i][0];j++) add(e[i][j-1],e[i][j],inf),add(e[i][j],e[i][j-1],0); } while (bfs()) ans+=dfs(0,inf); printf("%d\n",ans); return 0; }
相关文章推荐
- poj--1149--PIGS(最大流经典建图)
- poj 1149 PIGS【最大流经典建图】
- poj--1149--PIGS(最大流经典建图)
- poj 1149 PIGS(最大流经典构图)
- poj1149最大流经典构图神题
- POJ 1149 PIGS 用了三种求最大流的方法
- POJ 1149--PIGS 【最大流 && 处理重边 && 经典建模】
- poj1149最大流经典构图神题
- poj 1149 Pigs 网络流-最大流 建图的题目(明天更新)-已更新
- POJ 1149 PIGS(最大流 经典构图)
- POJ 1149 PIGS | 最大流问题
- poj 1149 PIGS(最大流+经典构图)
- poj 1149 Pigs 网络流-最大流 建图的题目(明天更新)-已更新
- poj 1149 PIGS【网络流经典建图】
- poj 1149 最大流经典建图
- POJ 1149:PIGS 网络流经典题
- poj 1149 PIGS 【网络流经典建模】【求最大流】
- POJ 1149:PIGS 网络流经典题
- POJ 1149 PIGS 最大流建模
- poj1149(pigs)