题目描述

之前还自以为全部塞在一个图里面就可以搞了。谁知,这样不行。
分开搞网络流,一方面可以节约某些时间,一方面有时候会简化问题。

#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
#define MAXPT 126000
#define MAXN 50
#define INF 2000000000struct node{int v,w,c;node *next,*back;
}edge[MAXPT*4+10],*adj[MAXPT+10],*ecnt=&edge[0],*fa[MAXPT+10];int n,m,k,need[MAXN+10][MAXN+10],have[MAXN+10][MAXN+10],cost[MAXN+10][MAXN+10][MAXN+10];
int s,t,dist[MAXPT+10],ans,tot;
bool vis[MAXPT+10];inline void Init()
{tot=0;ecnt=&edge[0];//memset(edge,0,sizeof edge); //加上这个瞬间慢成什么了。。memset(adj,0,sizeof adj);
}
void addedge(int u,int v,int c,int w)
{node *p=++ecnt;p->v=v;p->c=c,p->w=w;p->next=adj[u],p->back=ecnt+1;adj[u]=p;p=++ecnt;p->v=u;p->c=0,p->w=0;p->next=adj[v],p->back=ecnt-1;adj[v]=p;
}
void read()
{for(int i=1;i<=n;i++)for(int j=1;j<=k;j++)scanf("%d",&need[i][j]);for(int i=1;i<=m;i++)for(int j=1;j<=k;j++)scanf("%d",&have[i][j]);for(int p=1;p<=k;p++)for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&cost[p][i][j]);
}
bool SPFA()
{int u,v;memset(vis,0,sizeof vis);for(int i=s;i<=t;i++)dist[i]=INF;queue<int> que;que.push(s);vis[s]=true,dist[s]=0;while(!que.empty()){u=que.front(); que.pop();vis[u]=false;for(node *p=adj[u];p;p=p->next){v=p->v;if(p->c&&dist[v]>dist[u]+p->w){dist[v]=dist[u]+p->w;fa[v]=p;if(!vis[v]){que.push(v);vis[v]=true;}}}}if(dist[t]==INF) return false;else return true;
}
bool mincost_maxflow()
{int flow=0;while(SPFA()){int delta=INF;node *p;for(int u=t;u!=s;u=p->back->v){p=fa[u];delta=min(delta,p->c);}flow+=delta;for(int u=t;u!=s;u=p->back->v){p=fa[u];p->c-=delta;p->back->c+=delta;p->back->w=-p->w;ans+=delta*p->w;}}if(tot==flow) return true;else return false;
}
bool workout(int kth)
{Init();for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)addedge(i,n+j,INF,cost[kth][i][j]);s=0,t=n+m+1;for(int i=1;i<=n;i++){addedge(s,i,need[i][kth],0);tot+=need[i][kth];}for(int i=1;i<=m;i++)addedge(n+i,t,have[i][kth],0);return mincost_maxflow();
}
int main()
{while(scanf("%d%d%d",&n,&m,&k)){if(!n&&!m&&!k) break;read();ans=0;for(int i=1;i<=k;i++)if(!workout(i)){ans=-1;break;}printf("%d\n",ans);}
}

转载于:https://www.cnblogs.com/katarinayuan/p/6572855.html

Minimum Cost-最小费用最大流相关推荐

  1. POJ - 2516 Minimum Cost 最小费用最大流

    题目链接 题意:给n,m,k表示商店数,储存店数,种类数 然后给n*k表示每个水果店需求每种种类的数量: 表示成 need[i][j] 再给m*k表示每个储存店每种种类数量: 表示成store[i][ ...

  2. POJ - 2516 Minimum Cost(最小费用最大流)

    题目链接:点击查看 题目大意:给出n个买家,m个货点,以及k种货物,接下来按照顺序依次给出一个n*k的矩阵,表示每个买家对于每种货物的需求,一个m*k的矩阵,表示每个货点能供给货物的数量,k个n*m的 ...

  3. 网络流最大流进阶---最小费用最大流

    概念: 最小费用最大流是在最大流的基础上对网络中的每一条边都进行了加权(费用)处理,在某一条边的花费等于在该边的流量乘上单位流量的费用,求得在满足最大流的情况下的最小费用即为最小费用最大流问题. 最小 ...

  4. c语言最小费用流_策略算法工程师之路-图优化算法(一)(二分图amp;最小费用最大流)...

    目录 1.图的基本定义 2.双边匹配问题 2.1 二分图基本概念 2.2 二分图最大匹配求解 2.3 二分图最优匹配求解 2.4 二分图最优匹配建模实例 2.4.1 二分图最优匹配在师生匹配中的应用 ...

  5. 【最小费用最大流】Going Home

    概念: 在同一个网络中,可能存在多个总流量相同的最大流,我们可以在计算流量的基础之上,给网络中的弧增加一个单位流量的费用(简称费用),在确保流量最大的前提下总费用最小--最小费用最大流. C - Go ...

  6. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】最小费用最大流

    HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]带权二分图匹配 KM算法 In the kingdom of Henryy, there are N (2 <= N & ...

  7. POJ2195 Going Home 最小费用最大流

    POJ 2195 Going Home 二分图的最大权匹配 Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

  8. poj 2516(最小费用最大流)

    其实题意很明确,最小费用最大流, 但是我这2货就建图就太二了, 我把所有的情况都弄到一个图里面. 总的点数有5000个,加上这么多的边,果断TLE... 后面知道第k个的情况是独立的,所以可以分成K次 ...

  9. 【图论】最小费用最大流(网络流进阶)

    本文 前置基础:最大流问题(Dinic算法) && 单源最短路径(SPFA算法) 洛谷 P3381 [模板]最小费用最大流 所谓最小费用最大流,其实就是在最大流问题的基础上,再给边加上 ...

  10. 乌鲁木齐网络赛J题(最小费用最大流模板)

    ACM ICPC 乌鲁木齐网络赛 J. Our Journey of Dalian Ends 2017-09-09 17:24 243人阅读 评论(0) 收藏 举报  分类: 网络流(33)  版权声 ...

最新文章

  1. 【leetcode】clone-graph
  2. 字长16位的计算机表示最大整数_废话不多说跪送计算机选择8前十题
  3. 关于怎么获取jsp的web站点的目录问题
  4. java.rmi.server.port_java.rmi.server.ExportException: internal error: ObjID already in use报错处理...
  5. Python 字符串前面加u,r,b,f的含义(字符串前缀)
  6. python 第三方登录_【Python web 开发】social_django 集成第三方登录
  7. elasticsearch 条件去重_Elasticsearch学习之查询去重
  8. amend用法 git 信息_Git 高级用法,你用过哪些了
  9. 西门子200恒压供水梯形图_抚州市谁家的二次叠压供水设备有望统引领消费主流...
  10. Solidworks:Solidworks2016软件程序破解详细攻略说明(也适合长时间没使用SW2016再次破解)
  11. I2S协议-一篇文章带你了解
  12. 条码扫描枪在仓库管理无线网络AP解决方案
  13. 懒人精灵新版图色工具介绍
  14. 坐在自己的命运之中——《大先生》鲁迅一生的最后一分钟
  15. 卷积神经网络(三)-ZF-Net和VGG-Nets
  16. HTML+CSS+JS 01篇
  17. firefox不能正常下载文件
  18. 战神引擎 过黄列表教程
  19. oracle的switch+case语句吗,2.7 switch 语句中的 case 范围
  20. 用vue element-ui分页组件构建一个简单的分页 ( 超详细 )

热门文章

  1. 《面向对象分析与设计》读书笔记——第一章 复杂性
  2. C# DataGridView控件用法
  3. java float内存结构_Java后端开发岗必备技能:Java并发中的内存模型
  4. datagrid分页传递参数_四类数据库分页实现方案总结之Mysql分页实现
  5. java算法面试题_【干货】经典算法面试题代码实现-Java版
  6. nc65语义模型设计_完整word版,NC数据加工做语义模型
  7. element UI 选择器 踩的坑 获取到了value 显示不出对应的 value
  8. yolov3网络结构图_目标检测——YOLO V3简介及代码注释(附github代码——已跑通)...
  9. python创建数组放入矩阵_python创建数组并存入数据库
  10. C++知识点6——数组与指针初步