poj1149 最大流 PIGS
来源:互联网 发布:黑马人工计划软件 编辑:程序博客网 时间:2024/05/18 23:54
题意:M个猪圈,N个顾客,每个顾客有一些的猪圈的钥匙,只能购买这些有钥匙的猪圈里的猪,而且要买一定数量的猪,每个猪圈有已知数量的猪,
但是猪圈可以重新打开,将猪的个数,重新分配,以达到卖出的猪的数量最多。
思路:刚学网络流,表示很菜很菜很菜~~
①构造网络,将顾客看成源点和汇点以外的结点,并设另外两个节点:源点和汇点。
②源点和每个猪圈的第一个顾客连边,边的权是开始时候猪圈中猪的数量。
③ 若源点和某个节点之间有重边,则将权合并
④顾客j紧跟顾客i之后打开某个猪圈,则<i.j>的权是正无穷。
⑤每个顾客和会点之间连边,边的权值是顾客所希望购买的猪的数量。
例如:样例中的就可以建立如图:
其中inf是正无穷~~
#include<cstdio>#include<iostream>#include<algorithm>#include<queue>#include<cstring>using namespace std;#define maxn 1005#define INF 0x3f3f3f3fint cap[maxn][maxn],flow[maxn][maxn];int a[maxn],p[maxn];int n,m;int EK(){ int s=0,t=n+1; queue<int>q; int f=0; for(;;) { memset(a,0,sizeof(a)); a[s]=INF; q.push(s); while(!q.empty()) { int u=q.front(); q.pop(); for(int v = 0; v <=t; v++) if(!a[v] && cap[u][v] > flow[u][v]) { p[v] = u; q.push(v); a[v] = min(a[u], cap[u][v]-flow[u][v]); } } if(a[t]==0) break; for(int u=t; u!=s; u=p[u]) { flow[p[u]][u]+=a[t]; flow[u][p[u]]-=a[t]; } f+=a[t]; } return f;}int main(){ int pig[maxn]={0},vist[maxn]={0}; int k,key; memset(cap,0,sizeof(cap)); scanf("%d %d",&m,&n); for(int i=1;i<=m;i++) scanf("%d",&pig[i]); for(int i=1;i<=n;i++) { scanf("%d",&k); for(int j=1;j<=k;j++) { scanf("%d",&key); if(!vist[key]) cap[0][i]+=pig[key]; else cap[vist[key]][i]=INF; vist[key]=i; } scanf("%d",&key); cap[i][n+1]=key; } printf("%d\n",EK()); return 0;}
0 0
- POJ1149 PIGS(最大流)
- poj1149 最大流 PIGS
- POJ1149 PIGS 【最大流】
- POJ1149:PIGS 最大流
- POJ1149 PIGS 网络最大流
- poj1149 PIGS --- 最大流EK
- POJ1149 PIGS (最大流)
- POJ1149 PIGS(最大流)
- POJ1149:PIGS(最大流)
- poj1149 PIGS 网络最大流Dinic
- POJ1149 PIGS【特殊建图,最大流】
- poj1149 PIGS(最大流+建模)
- poj1149 PIGS(建图最大流)
- poj1149 PIGS(网络流)
- [网络流]poj1149 PIGS
- poj1149 PIGS 最大流 神奇的建图
- poj1149 PIGS 神奇的建图 最大流
- POJ1149 PIGS 最大流-建模 附isap模板
- 让elasticsearch(es)分片分布在不同的机器上
- POJ3295
- XDOJ1178 - 角划分平面
- Elasticsearch store属性理解
- 二分图匹配模版及题型总结
- poj1149 最大流 PIGS
- f发个链接看看
- 佛祖保佑 永无bug
- Java虚拟机的启动与程序的运行
- iOS_导入libxml2.2框架后,找不到<libxml/tree.h>的解决办法
- 资源收藏:扁平化风格的图标
- BZO3065 带插入区间K小值
- FILE上传图片
- 谷歌眼镜的技术原理