主要是思维建边,建有向边,然后跑模板就行了

可以解决KM算法所能解决的问题(完全取代)

可以解决非完备匹配问题中的最大权匹配和最小权匹配,分别对应着最大费用最大流和最小费用最大流

模板:

最大费用最大流:

const int N=1e5+100;//点const int M=1e5+100;//边struct Edge
{int to,w,cost,next;
}edge[M];int head[N],cnt;void addedge(int u,int v,int w,int cost)
{edge[cnt].to=v;edge[cnt].w=w;edge[cnt].cost=cost;edge[cnt].next=head[u];head[u]=cnt++;edge[cnt].to=u;edge[cnt].w=0;edge[cnt].cost=-cost;edge[cnt].next=head[v];head[v]=cnt++;
}int d[N],incf[N],pre[N];bool vis[N];bool spfa(int s,int t)
{memset(d,0xcf,sizeof(d));memset(vis,false,sizeof(vis));memset(pre,-1,sizeof(pre));queue<int>q;q.push(s);vis[s]=true;incf[s]=inf;d[s]=0;while(!q.empty()){int u=q.front();q.pop();vis[u]=false;for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;int w=edge[i].w;int cost=edge[i].cost;if(!w)continue;if(d[v]<d[u]+cost){d[v]=d[u]+cost;pre[v]=i;incf[v]=min(incf[u],w);if(!vis[v]){vis[v]=true;q.push(v);}}}}return pre[t]!=-1;
}int update(int s,int t)
{int x=t;while(x!=s){int i=pre[x];edge[i].w-=incf[t];edge[i^1].w+=incf[t];x=edge[i^1].to;}return d[t]*incf[t];
}void init()
{memset(head,-1,sizeof(head));cnt=0;
}int solve(int st,int ed)
{int ans=0;while(spfa(st,ed))ans+=update(st,ed);return ans;
}

最小费用最大流:

const int N=1e5+100;//点const int M=1e5+100;//边struct Edge
{int to,w,cost,next;
}edge[M];int head[N],cnt;void addedge(int u,int v,int w,int cost)
{edge[cnt].to=v;edge[cnt].w=w;edge[cnt].cost=cost;edge[cnt].next=head[u];head[u]=cnt++;edge[cnt].to=u;edge[cnt].w=0;edge[cnt].cost=-cost;edge[cnt].next=head[v];head[v]=cnt++;
}int d[N],incf[N],pre[N];bool vis[N];bool spfa(int s,int t)
{memset(d,inf,sizeof(d));memset(vis,false,sizeof(vis));memset(pre,-1,sizeof(pre));queue<int>q;q.push(s);vis[s]=true;incf[s]=inf;d[s]=0;while(!q.empty()){int u=q.front();q.pop();vis[u]=false;for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;int w=edge[i].w;int cost=edge[i].cost;if(!w)continue;if(d[v]>d[u]+cost){d[v]=d[u]+cost;pre[v]=i;incf[v]=min(incf[u],w);if(!vis[v]){vis[v]=true;q.push(v);}}}}return pre[t]!=-1;
}int update(int s,int t)
{int x=t;while(x!=s){int i=pre[x];edge[i].w-=incf[t];edge[i^1].w+=incf[t];x=edge[i^1].to;}return d[t]*incf[t];
}void init()
{memset(head,-1,sizeof(head));cnt=0;
}int solve(int st,int ed)
{int ans=0;while(spfa(st,ed))ans+=update(st,ed);return ans;
}

费用流:最大费用最大流和最小费用最大流(模板)相关推荐

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

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

  2. 最大流最小费用java_最小费用最大流及算法

    最大流的网络,可看作为辅送一般货物的运输网络,此时,最大流问题仅表明运输网络运输货物的能力,但没有考虑运送货物的费用.在实际问题中,运送同样数量货物的运输方案可能有多个,因此从中找一个输出费用最小的的 ...

  3. POJ-2195(最小费用最大流)

    题意:二分图最小权匹配. 构图:S向左边的点连容量1,费用0的边,右边的点向T连容量1,费用0的边,点之间连容量1,费用为边权的边.最小费用最大流. 注意: 1.100*100的方格中有10000个点 ...

  4. 洛谷 - P4009 汽车加油行驶问题(分层图最短路/最小费用最大流)

    题目链接:点击查看 题目大意:给出一个n*n的矩阵表示道路,途中有一些加油站,现在要从点(1,1)到达点(n,n),问最小花费,其中的一些规则如下: 汽车只能沿着网格边行驶,装满油后可以行驶K条边,出 ...

  5. uva 10594(最小费用最大流)

    题意:在一个无向网络中,告诉你边的容量与费用.现在需要传送d个数据问你你否能传送成功,若成功则最小费用是多少. 思路:显然是最小费用最大流问题,这道题的见图比较简单.只需要添加一个原点费用为D指向1就 ...

  6. 有下界的最小费用可行流2.0(bzoj 3876: [Ahoi2014]支线剧情)

    什么是有下界的最小费用可行流? 平时来讲都是最小费用最大流,也就是在满流的前提条件下费用尽可能的少,而最小费用可行流一般不要求满流,但是每条边都有最小流量要求(比如经过边e(u,v)的流量不能少于4等 ...

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

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

  8. poj 3422 Kaka's Matrix Travels(最小费用最大流)

    题目链接 Kaka's Matrix Travels Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9394   Accep ...

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

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

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

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

最新文章

  1. 面向对象进阶2 组合
  2. drop wp table
  3. @Autowired 注释的作用和用法
  4. Web应用开发中的几个问题
  5. python 函数嵌套 报错_《Python》 函数嵌套、闭包和迭代器
  6. 提高openfire最大连接数
  7. 关于键盘事件对象code值
  8. css中背景颜色的代码,css背景代码是什么,css怎么控制背景颜色
  9. webview出现图片加载异常 Mixed Content: The page at 'https
  10. verilog刷题笔记007
  11. java数组实现 多个数字求最大公约数
  12. Android异常之SIGABRT
  13. 如何提升APP日活(DAU)?
  14. I.MX6ULL ARM驱动开发---platfrom设备驱动
  15. 智能风控平台之决策引擎介绍
  16. Android加密工具类,Android AES加密工具类分享
  17. 山东初级消防设施操作员考前必背考点,模拟真题及答案
  18. Java最全的设计模式之行为设计模式前六种
  19. 别人赚钱时你却在解套,是少了止盈止损环节!股票量化分析工具QTYX-V2.4.1
  20. .net core minimal api 上传文件

热门文章

  1. MySQL高级 - 日志 - 错误日志
  2. nginx配置websocket转发功能
  3. map和reduce
  4. 日志规范之为什么要使用SLF4J
  5. 后台服务系统之搭建ZooKeeper注册中心
  6. Spring Boot整合Spring Data Redis-提取Redis的链接参数
  7. 总结:服务器硬件对性能的影响
  8. 设计模式之_Strategy_03
  9. cookie和session常见问题
  10. redis(22)--二进制位数组