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

最小费用最大流的迭代算法

1.求出从s到t的最小费用通路(spfa)和通路的最大流量f。

2.让通路上的边(i,j)流量减去f;添加反向边(j,i),容量为f,费用为-cost(i,j)。

3.重复1,2,直到从s到t的流量=v(f)或者再也找不到从s到t的最小费用道路为止。

最小费用最大流算法还可以解决二分图最优匹配。

最小费用最大流模板:

Cpp代码  
  1. const int size = 1102;
  2. const int INF = 0x7fffffff;
  3. struct Edge
  4. {
  5. int to;
  6. int vol;
  7. int cost;
  8. int next;
  9. }e[size*40];
  10. int index[size];
  11. int edgeNum;
  12. int pre[size], pos[size];
  13. int dis[size], que[size*10];
  14. bool vis[size];
  15. void insert(int from, int to, int vol, int cost)
  16. {
  17. e[edgeNum].to = to;
  18. e[edgeNum].vol = vol;
  19. e[edgeNum].cost = cost;
  20. e[edgeNum].next = index[from];
  21. index[from] = edgeNum++;
  22. e[edgeNum].to = from;
  23. e[edgeNum].vol = 0;
  24. e[edgeNum].cost = -cost;
  25. e[edgeNum].next = index[to];
  26. index[to] = edgeNum++;
  27. }
  28. bool spfa(int s, int t)
  29. {
  30. int i;
  31. memset(pre, -1, sizeof(pre));
  32. memset(vis, 0, sizeof(vis));
  33. int head, tail; head = tail = 0;
  34. for(i = 0; i < size; i++)
  35. dis[i] = INF;
  36. que[tail++] = s;
  37. pre[s] = s;
  38. dis[s] = 0;
  39. vis[s] = 1;
  40. while(head != tail)
  41. {
  42. int now = que[head++];
  43. vis[now] = 0;
  44. for(i = index[now]; i != -1; i = e[i].next)
  45. {
  46. int adj = e[i].to;
  47. if(e[i].vol > 0 && dis[now] + e[i].cost < dis[adj])
  48. {
  49. dis[adj] = dis[now] + e[i].cost;
  50. pre[adj] = now;
  51. pos[adj] = i;
  52. if(!vis[adj])
  53. {
  54. vis[adj] = 1;
  55. que[tail++] = adj;
  56. }
  57. }
  58. }
  59. }
  60. return pre[t] != -1;
  61. }
  62. int MinCostFlow(int s, int t, int flow)
  63. {
  64. int i;
  65. int cost = 0;
  66. flow = 0;
  67. while(spfa(s, t))
  68. {
  69. int f = INF;
  70. for(i = t; i != s; i = pre[i])
  71. if (e[pos[i]].vol < f) f = e[pos[i]].vol;
  72. flow += f; cost += dis[t] * f;
  73. for(i = t; i != s; i = pre[i])
  74. {
  75. e[pos[i]].vol -= f;
  76. e[pos[i] ^ 1].vol += f;
  77. }
  78. }
  79. return cost; // flow是最大流值
  80. }

参见poj2516 2195 2135。

网络流之——最小费用最大流相关推荐

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

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

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

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

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

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

  4. 网络流--最小费用最大流 (理解)

    1.什么是最小费用最大流问题 上篇文章我们讲解了最大流问题,那什么是最小费用最大流呢?听名字就可以看出,我们要在满足最大流的同时找到达成最大流的最小费用. 对于一个网络流,最大流是一定的,但是组成最大 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Oracle undo表空间
  2. Javascript - Vue - webpack
  3. 【django】创建模型类
  4. Python 工具链让你写的代码更规范
  5. python学习-38迭代器和生成器
  6. 使用模板部署的Linux虚拟机网卡不可用的处理方法
  7. jquery上传图片插件(支持各种功能)
  8. NLP学习—20.WMD paper及代码
  9. 矩阵运算_Sophus库的使用
  10. 统计学三大相关系数之皮尔森(pearson)相关系数
  11. 51单片机控制数码管显示hello,012345,以及apple自动切换
  12. Altium designer—STM32F103ZET6最小系统原理图
  13. 设计专业是计算机的吗,计算机平面设计是属于计算机什么专业范畴?
  14. 81章 老子1章到_国学经典《老子*道德经》全文及翻译(全文共81章)。(此第7部分:61-70章)...
  15. 画布项目着色器(CanvasItem shaders):Godot的2D着色器
  16. 中国筋膜枪行业销售状况及营销前景预测报告(2022-2027年版)
  17. CityEngine2018正版免费申请试用教程
  18. 累计三年,断断续续的管理经验
  19. 深度报道 第1个从太空发回的LoRa信号(含视频)
  20. 支付宝小程序分享转发

热门文章

  1. 【C 语言】变量本质 ( 变量概念 | 变量本质 - 内存空间别名 | 变量存储位置 - 代码区 | 变量三要素 )
  2. 【Android 逆向】Android 系统文件分析 ( Android 系统 root 环境准备 | 查看 Android 根目录信息 )
  3. 【错误记录】PyCharm 运行 Python 程序报错 ( UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe5 in positio )
  4. 【Android NDK 开发】NDK 交叉编译 ( NDK 函数库目录 | Linux 交叉编译环境搭建 | 指定头文件目录 | 指定函数库目录 | 编译 Android 命令行可执行文件 )
  5. 【Android 应用开发】Android - TabHost 选项卡功能用法详解
  6. 02.v-cli快速搭建
  7. Ubuntu终端多窗口分屏Terminator
  8. 数学——Euler方法求解微分方程详解(python3)
  9. bmp文件格式详细解析
  10. 关于数据库性能优化小经验