貌似网上最小费用最大流的讲解的不多。

所谓最小费用最大流:就是在保证从源点 S 到汇点 T 的流量最大的前提下,使费用最小

这就在原先最大流问题的网络中,给每天边上新加上了费用,求得不在是最大流,而是在最大流的前提的下最小费用。

求解最大流的时候,我们不断的在残余网络上不断的贪心增广而得到最大流,现在边上多了费用,而求得正好是最小的费用,那么我们是不是每次可以沿着最短路增广呢,每条边的费用看作是权值,这样求得的必然是最小费用最大流。

首先hdoj 1533

题意:给出一个m*n的图,然后让你从 m 到 H 的的最小花费。

建图方法:

s 到所有 m 点连接:容量1,费用0

所有 H 点到 t 连接:容量1,费用0

其他点奇偶建图,容量inf,费用1

下面给一个最小费用最大流的模板,一些注意的地方陆续总结到这里。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>
#include <string>
#include <map>
using namespace std;
#define Del(a,b) memset(a,b,sizeof(a))
const int inf = 0x3f3f3f3f;
const int N = 220;
struct Node
{int from,to,cap,flow,cost;
};
vector<Node> e;
vector<int> v[N];
int vis[N],dis[N];
int p[N],a[N];  //p保存father,a保存cap
void Clear(int x)
{for(int i=0;i<=x;i++)v[i].clear();e.clear();
}
void add_Node(int from,int to,int cap,int cost)
{e.push_back((Node){from,to,cap,0,cost});e.push_back((Node){to,from,0,0,-cost});int len = e.size()-1;v[to].push_back(len);v[from].push_back(len-1);
}
bool BellmanFord(int s,int t,int& flow,int& cost)
{Del(dis,inf);Del(vis,0);dis[s] = 0;vis[s] = 1;p[s] = 0;a[s] = inf;queue<int> q;q.push(s);while(!q.empty()){int u = q.front();q.pop();vis[u] = 0;for(int i=0; i<v[u].size(); i++){Node& g = e[v[u][i]];if(g.cap>g.flow && dis[g.to] > dis[u]+g.cost){dis[g.to] = dis[u] + g.cost;p[g.to] = v[u][i];  //保存前驱a[g.to] = min(a[u],g.cap-g.flow);if(!vis[g.to]){q.push(g.to);vis[g.to]=1;}}}}if(dis[t] == inf)return false;flow += a[t];cost += dis[t]*a[t];int u = t;while(u!=s){e[p[u]].flow += a[t];e[p[u]^1].flow -= a[t];u = e[p[u]].from;}return true;
}
int Min_Cost(int s,int t)
{int flow=0,cost = 0;while(BellmanFord(s,t,flow,cost));return cost;
}

最小费用最大流算法及题集相关推荐

  1. matlab最小费用最大流函数,Matlab最小费用最大流算法通用程序

    下面的最小费用最大流算法采用的是"基于Floyd最短路算法的Ford和Fulkerson迭加算法",其基本思路为:把各条弧上单位流量的费用看成某种长度,用Floyd求最短路的方法确 ...

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

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

  3. matlab最小费用最大流函数,最小费用最大流算法通用Matlab程序

    下面的最小费用最大流算法采用的是"基于Floyd最短路算法的Ford和Fulkerson迭加算法",其基本思路为:把各条弧上单位流量的费用看成某种长度,用Floyd求最短路的方法确 ...

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

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

  5. 最小费用最大流MCMF算法

    摘要 在复杂网络研究中,单源单点的最小费用最大流算法(以下简称MCMF)的应用十分广泛,也引申出类似预流推进.ZKW.SPFA等相关方法. 在华为2017CodeCraft中,MCMF可以说是各家实力 ...

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

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

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

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

  8. LightOJ - 1243 Guardian Knights(最小费用最大流+bfs)

    题目链接:点击查看 题目大意:给出一个n*n的地图,其中: #:代表墙 .:代表空格子 大写字母:代表骑士 m:代表谷仓 现在要求每个谷仓都要至少被一个骑士保护,规定骑士保护某个谷仓的代价是骑士到达谷 ...

  9. 使用dijkstra求解最小费用最大流网络

    前言 在介绍如何使用dijkstra算法求解最小费用最大流问题的时候,假设看这篇博文的读者已经知道什么是最小费用最大流问题及熟悉dijkstra单源最短路径算法.在这篇博文里面,我并不会过多强调网络拓 ...

最新文章

  1. 华为hybrid-vlan
  2. HDU 4635 Strongly connected(缩点、最多可加边数使得仍然非强连通)
  3. js算法初窥06(算法模式03-函数式编程)
  4. java泛型程序设计——通配符类型+通配符的超类型限定
  5. cocos2d-x的未来之旅
  6. 多个数字数组_九章算法 | 谷歌面试题:多个数组的交集
  7. 各种排序算法稳定性比较
  8. 如何运用接口中的变量?接口可以扩展吗?
  9. 长文详解Attention、Seq2Seq与交互式匹配
  10. 音阶频率对照表_八度音阶和频率的关
  11. java 实现QQ自动登录(带验证码)
  12. 人工智能之-产生式系统
  13. qqxml代码-班级作业xml卡片代码班级作业
  14. C#实现检测打印机状态(包括打印机是否缺纸、打印队列任务数)
  15. 使用ffmpeg对视频、图片进行旋转,上下翻转,水平翻转
  16. 你理解的商业数据分析到底是怎样的?
  17. css实现超过两行用...表示
  18. react+mobx+jquery构建大型工具项目经验总结
  19. XML文件内容格式化与语法错误自动检查
  20. outlook怎么删除服务器备份文件,如何彻底删除outlook的一切数据,包括账户信息和邮件...

热门文章

  1. Java之三目运算符
  2. 远程办公新常态,为什么需要“零信任”模式?
  3. python 之mechanize
  4. Beego搭建企业微信机器人定时消息推送
  5. OFDMA,LFDMA以及IFDMA的PAPR对比仿真
  6. UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xca in position 358: in
  7. 【大数据】为什么要学习大数据
  8. 跑跑卡丁车最新等级奖励2016
  9. 关于chrome、360浏览器自动填充的黄色背景处理方案
  10. C语言冒泡排序(起泡法)