题目描述

如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用。

输入输出格式

输入格式:

第一行包含四个正整数N、M、S、T,分别表示点的个数、有向边的个数、源点序号、汇点序号。

接下来M行每行包含四个正整数ui、vi、wi、fi,表示第i条有向边从ui出发,到达vi,边权为wi(即该边最大流量为wi),单位流量的费用为fi。

输出格式:

一行,包含两个整数,依次为最大流量和在最大流量情况下的最小费用。

思路

说白了,就是把dinic的bfs改成spfa。
不过方法有点不同。
要有pre数组存下增广路(不用标号)

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=100010;bool vis[maxn];
int n,m,s,t,x,y,z,f,dis[maxn],pre[maxn],last[maxn],flow[maxn],maxflow,mincost;
struct Edge{int to,next,flow,dis;
}edge[maxn];
int head[maxn],num_edge;
queue <int> q;void add_edge(int from,int to,int flow,int dis)
{edge[++num_edge].next=head[from];edge[num_edge].to=to;edge[num_edge].flow=flow;edge[num_edge].dis=dis;head[from]=num_edge;
}bool spfa(int s,int t)
{memset(dis,0x7f,sizeof(dis));memset(flow,0x7f,sizeof(flow));memset(vis,0,sizeof(vis));q.push(s); vis[s]=1; dis[s]=0; pre[t]=-1;while (!q.empty()){int now=q.front();q.pop();vis[now]=0;for (int i=head[now]; i!=-1; i=edge[i].next){if (edge[i].flow>0 && dis[edge[i].to]>dis[now]+edge[i].dis){dis[edge[i].to]=dis[now]+edge[i].dis;pre[edge[i].to]=now;last[edge[i].to]=i;flow[edge[i].to]=min(flow[now],edge[i].flow);if (!vis[edge[i].to]){vis[edge[i].to]=1;q.push(edge[i].to);}}}}return pre[t]!=-1;
}void MCMF()
{while (spfa(s,t)){int now=t;maxflow+=flow[t];mincost+=flow[t]*dis[t];while (now!=s){edge[last[now]].flow-=flow[t];edge[last[now]^1].flow+=flow[t];now=pre[now];}}
}int main()
{memset(head,-1,sizeof(head)); num_edge=-1;scanf("%d%d%d%d",&n,&m,&s,&t);for (int i=1; i<=m; i++){scanf("%d%d%d%d",&x,&y,&z,&f);add_edge(x,y,z,f); add_edge(y,x,0,-f);}MCMF();printf("%d %d",maxflow,mincost);return 0;
}

【模板】最小费用最大流相关推荐

  1. 有源汇上下界最小费用可行流 ---- P4043 [AHOI2014/JSOI2014]支线剧情(模板)

    题目链接 题目大意: 解题思路: 有源汇上下界最小费用可行流模板题目来着 先建出一个有源汇上下界可行流的图,然后注意建图的时候要把每条边的下界的费用提前加到ans里面 然后再对图跑费用流,就是补齐费用 ...

  2. Doctor NiGONiGO’s multi-core CPU(最小费用最大流模板)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=693 题意:有一个 k 核的处理器和 n 个工作,全部的工作都须要在一个核上处理一个单位的 ...

  3. 费用流:最大费用最大流和最小费用最大流(模板)

    主要是思维建边,建有向边,然后跑模板就行了 可以解决KM算法所能解决的问题(完全取代) 可以解决非完备匹配问题中的最大权匹配和最小权匹配,分别对应着最大费用最大流和最小费用最大流 模板: 最大费用最大 ...

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

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

  5. 最大流、最小费用最大流【模板】

    一下代码版权归:HIT    xiaodai 最大流模板:(题目链接) #include <cstring> #include <algorithm> #include < ...

  6. 最小费用最大流 【模板】

    如果理解了最大流连续增广路算法的思维, 理解这个算法还是很简单的. 结构体存储信息: 分别为边的起点.终点.容量.当前流量.费用.下一条边的编号. struct Edge {int from, to, ...

  7. 最大流 最小费用最大流模板

    模板从  这里   搬运,链接博客还有很多网络流题集题解参考. 最大流模板 ( 可处理重边 ) const int maxn = 1e6 + 10; const int INF = 0x3f3f3f3 ...

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

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

  9. 【最小费用可行流模板】

    可能再也用不到了吧,今天整理电脑文件看到的,作为图论选手,留个纪念, //原图: 对于pi,拆点xi,yi s->S,[m,m],0 S->xi,[0,inf],0 yi->t,[0 ...

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

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

最新文章

  1. Java 8 的 JVM 有多快?Fork-Join 性能基准测试
  2. Linux下bash的PS1
  3. 51单片机有几个通用io口_51单片机IO口的四种使用方法
  4. 业内首款云原生技术中台产品云原生 Stack 来了
  5. mysql基本介绍和优化技巧
  6. (转)分布式文件存储FastDFS(六)FastDFS多节点配置
  7. 深度探索QT窗口系统——几何篇
  8. Java基础---其他对象
  9. hive concat_w实现将多行记录合并成一行
  10. sql语句智能提示插件
  11. 中国系泊系统行业市场供需与战略研究报告
  12. (二)计算软件的安装:truegrid、ls-prepost、ls-dyna
  13. 关于百度移动端搜索中结果聚合的几个常见案例分析
  14. 231个web前端的javascript特效分享
  15. 服务器显示阵列卡升级,dell r730服务器更换阵列卡后报错,弹出黑框
  16. svn的安装linux
  17. 重装系统开机蓝屏0x0000007E错误但是可以进入安全模式
  18. Unity 3D课程总结
  19. 初识linux之进程
  20. 4万字【Python高级编程】保姆式教学,Python大厂高频面试题解析

热门文章

  1. 3D激光雷达SLAM算法学习02——3D激光雷达传感器
  2. 中国程序员最容易发错的单词
  3. 计算文件及字符串的VBS脚本
  4. spine 动态换皮功能
  5. Windows 10离线安装dotnetfx35
  6. android vold磁盘管理
  7. Linux环境C语言开发基础
  8. 数字化的一切都会在安全沙箱里面
  9. php 中margin-top,margin-top是什么意思-css编程词典-php中文网
  10. matlab直流电机初始转速,直流电机转速控制的matlab实验.doc