1、什么是最小费用最大流问题

  上篇文章我们讲解了最大流问题,那什么是最小费用最大流呢?听名字就可以看出,我们要在满足最大流的同时找到达成最大流的最小费用。

对于一个网络流,最大流是一定的,但是组成最大流的费用是可以不同的,这里就有了在最大流网络上产生的费用流网络,就有了最小花费问题。

  简单来说,就是满足最大流的路径可能有多条,我们要从这多条路径中找到一条花费代价最小的路径。所以最大流是解决这类问题的前提

2、EK算法 + SPFA 最短路

    我们用每条边单位流量的花费作为边权,假如一条合法路径上每条边的花费分别为 c1,c2,.......ck , 并且这条边上的最小流量为flow,

  那么这条路径上的花费为 : c1 * flow + c2*flow + ..... + ck*flow = (c1+ c2 + c3 + .... + ck)*flow =  dis [ci] * flow

  这里的 dis[ci] 就是我们要求的最短路!

3、算法思想

  采用贪心的思想,每次找到一条从源点到达汇点的路径,增加流量,且该条路径满足使得增加的流量的花费最小,直到无法找到一条从源点到达汇点的路径,算法结束。
由于最大流量有限,每执行一次循环流量都会增加,因此该算法肯定会结束,且同时流量也必定会达到网络的最大流量;同时由于每次都是增加的最小的花 费,即当前的最小花费是所有到达当前流量flow时的花费最小值,因此最后的总花费最小。

4、求解步骤

  1、找到一条从源点到达汇点的花费最小的路径,该花费 = 使用该路径上的边的单位费用之和
  2、然后找出这条路径上的边的容量的最小值f,则当前最大流 max_flow 扩充f(求最大流的过程,同时当前最小费用 min_cost 扩充 f*min_dist(s,t)。
  3、更新路径流量 flow[][] ,将这条路径上的每条正向边的容量都减少f,每条反向边的容量都增加f。
  4、重复(1~3)直到无法找到从源点到达汇点的路径。

5、需要注意几点

  1、注意超级源点和超级终点的建立。这里的超级源点/汇点的建立是把所有边统一起来,构成一张网络图,因为有些题目不会直接给你网络图,

  需要你自己去建立,例如 hdu 1533

  2、初始化时,正向边的单位流量费用为cost[u][v],那么反向边的单位流量费用就为 -cost[u][v]。正向边和反向边的费用互为相反数,因为回流费用减少。
  3、费用cost数组和容量cap数组每次都要初始化为0。
  4、求解从源点到汇点的“最短”路径时,由于网络中存在负权边,因此使用SPFA来实现。

6、代码

  

int cap[500][500],cost[500][500],flow[500][500];//cap是容量,cost是花费,flow是流量
int pre[500],dis[500],vis[500],cnt[500];//pre是记录增广路的前驱节点,dis[i]是记录源点到节点i的最小距离
//vis[i]标记点是否在队列中,cnt[i]记录点i进入队列的次数int n,m;
int st,endd;
int mn_cost,mx_flow;
int spfa()
{for(int i=0;i<n;i++)dis[i]=mx;memset(vis,0,sizeof(vis));memset(cnt,0,sizeof(cnt));queue<int>p;p.push(st);//st是起点vis[st]=1;cnt[st]=1;dis[st]=0;while(!p.empty()){int now=p.front();p.pop();vis[now]=0;for(int i=0;i<n;i++){if(cap[now][i]>flow[now][i]&&dis[i]>dis[now]+cost[now][i])//这里将费用看成是长度,求源点到汇点的最小距离
            {dis[i]=dis[now]+cost[now][i];pre[i]=now;if(vis[i]==0){p.push(i);vis[i]=1;cnt[i]++;if(cnt[i]>n)return 0;}}}}if(dis[endd]>=mx)return 0;return 1;
}
void bfs(int n)//顶点数
{memset(flow,0,sizeof(flow));mx_flow=0;mn_cost=0;while(spfa()){int f=mx;for(int i=endd;i!=st;i=pre[i])f=min(f,cap[pre[i]][i]-flow[pre[i]][i]);for(int i=endd;i!=st;i=pre[i]){flow[pre[i]][i]+=f;flow[i][pre[i]]-=f;}mn_cost+=dis[endd]*f;             mx_flow+=f;}
}

模板题:https://www.cnblogs.com/-citywall123/p/11329609.html

转载于:https://www.cnblogs.com/-citywall123/p/11329508.html

网络流--最小费用最大流 (理解)相关推荐

  1. 网络流----最小费用最大流(EK+SPFA)

    先来介绍一下什么是费用流(部分内容参考bilibili董晓算法) 给定一个网络G=(V,E),每条边有容量限制w(u,v),还有单位流量的费用c(u,v). 当(u,v)的流量为f(u,v)时,需要花 ...

  2. 洛谷 P2053 [SCOI2007]修车 网络流 最小费用最大流 Dinic+Spfa

    题目链接: https://www.luogu.com.cn/problem/P2053 思路参考博客: https://www.luogu.com.cn/blog/a23333/solution-p ...

  3. 中转站有容量限制的运输问题(最小费用最大流)

    初学,如有问题欢迎交流~ 问题详述 模型假设 线性规划 线性规划模型建立 线性规划模型求解 中转站增加容量限制 网络流 最小费用最大流模型建立 最小费用最大流模型求解 整体算法设计 贝尔曼-福特算法( ...

  4. 经典网络流题目模板(P3376 + P2756 + P3381 : 最大流 + 二分图匹配 + 最小费用最大流)...

    题目来源 P3376 [模板]网络最大流 P2756 飞行员配对方案问题 P3381 [模板]最小费用最大流 最大流 最大流问题是网络流的经典类型之一,用处广泛,个人认为网络流问题最具特点的操作就是建 ...

  5. 【网络流24题】餐巾计划问题(最小费用最大流)

    [网络流24题]餐巾计划问题(最小费用最大流) 题面 COGS 洛谷上的数据范围更大,而且要开longlong 题解 餐巾的来源分为两种: ①新买的 ②旧的拿去洗 所以,两种情况分别建图 先考虑第一种 ...

  6. 最小费用最大流算法 网络流

    最小费用最大流算法 图片来源 <趣学算法> 人民邮电出版社 陈小玉 代码实现 /* 参考:<趣学算法>陈小玉 人民邮电出版社 最小费用最大流---最小费用路算法 问题分析:在实 ...

  7. 网络流(一)最大流问题EdmondsKarp和最小费用最大流

    一.最大流问题 如下图所示,假设需要把一些物品从结点S(称为源点)运送到结点t(称为汇点),可以从其它结点中转.每条边上的权值(左图)表示该条路径最多能运送的物品数,右图边上的权值第一个数表示实际运送 ...

  8. 网络流之——最小费用最大流

    学习最小费用最大流前,需要学习最大流算法.在最大流算法中,没有考虑边的费用问题.在MinCostMaxFlow中,引入了费用的概念:cij表示边(i,j)单位流量的费用.在满足流量=v(f)的同时,并 ...

  9. 【HDU - 6118】度度熊的交易计划(最小费用可行流,网络流费用流变形 )

    题干: 度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题: 喵哈哈村以及周围的村庄可以看做是一共由n个片区,m条公路组成的地区. 由于生产能力的区别,第i个片区能够花费a[i]元生产1个 ...

最新文章

  1. 单链表-在带头结点的单链表L中删除一个最小值结点(四指针)
  2. Ubuntu安装wps Linux版
  3. oracle进程内存不足1046552,ora-04030 进程内存不足解决方案
  4. lol修改服务器域名,LOL历史转区用户解冻大区官网自助系统地址 新版申请解冻账号网址...
  5. js ‘use strict’详解
  6. Android 安装详解---Mr.Zhang
  7. 从零开始搭建vue移动端项目到上线的步骤
  8. Oracle sqlplus prelim 参数介绍
  9. Impala命令COMPUTE STATS的解析
  10. STM32MP157系统移植(TF-A,U-Boot,Linux)
  11. 基于51,人体红外感应和RC522的门禁系统
  12. 免费使用GPU服务器
  13. pdf书籍资源共享_书籍和更多内容已获许可使用知识共享
  14. 集合,ArrayList,LinkedList,HashMap,LinkedHashMap,ConcurremtHashMap分别的总结,volatile 关键字的使用
  15. ios虚拟机运行速度_iOS 8的采用速度减慢至虚拟停止
  16. 从小市值因子策略入手,带你入门量化投资 (附年化收益率77.83%策略)
  17. 科研实验用,TPGS-COOH羧基修饰维生素E聚乙二醇琥珀酸酯
  18. SEO技术大师-论坛网站SEO设置方法
  19. QA:MEID号申请、什么是MEID号、怎么申请MEID号、MEID号获取
  20. git导出代码的方法~archive

热门文章

  1. JVM-通过MAT工具对dump文件进行分析
  2. ARIMA基本概念和流程讲解
  3. 谷粒学院——Day11【首页数据显示和添加Redis缓存】
  4. Okio基本使用以及源码分析
  5. PCIE REFCLKS时钟测量方法
  6. 游戏测试-测试用例编写规范
  7. 常见搜索引擎及其抓取蜘蛛
  8. [骨架动作识别]数据集
  9. js正则匹配某个汉字
  10. 自助式数据分析平台:jvs数据智仓-统计报表的使用条件及界面介绍