【模板】最小费用最大流
题目描述
如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用。
输入输出格式
输入格式:
第一行包含四个正整数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;
}
【模板】最小费用最大流相关推荐
- 有源汇上下界最小费用可行流 ---- P4043 [AHOI2014/JSOI2014]支线剧情(模板)
题目链接 题目大意: 解题思路: 有源汇上下界最小费用可行流模板题目来着 先建出一个有源汇上下界可行流的图,然后注意建图的时候要把每条边的下界的费用提前加到ans里面 然后再对图跑费用流,就是补齐费用 ...
- Doctor NiGONiGO’s multi-core CPU(最小费用最大流模板)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=693 题意:有一个 k 核的处理器和 n 个工作,全部的工作都须要在一个核上处理一个单位的 ...
- 费用流:最大费用最大流和最小费用最大流(模板)
主要是思维建边,建有向边,然后跑模板就行了 可以解决KM算法所能解决的问题(完全取代) 可以解决非完备匹配问题中的最大权匹配和最小权匹配,分别对应着最大费用最大流和最小费用最大流 模板: 最大费用最大 ...
- 经典网络流题目模板(P3376 + P2756 + P3381 : 最大流 + 二分图匹配 + 最小费用最大流)...
题目来源 P3376 [模板]网络最大流 P2756 飞行员配对方案问题 P3381 [模板]最小费用最大流 最大流 最大流问题是网络流的经典类型之一,用处广泛,个人认为网络流问题最具特点的操作就是建 ...
- 最大流、最小费用最大流【模板】
一下代码版权归:HIT xiaodai 最大流模板:(题目链接) #include <cstring> #include <algorithm> #include < ...
- 最小费用最大流 【模板】
如果理解了最大流连续增广路算法的思维, 理解这个算法还是很简单的. 结构体存储信息: 分别为边的起点.终点.容量.当前流量.费用.下一条边的编号. struct Edge {int from, to, ...
- 最大流 最小费用最大流模板
模板从 这里 搬运,链接博客还有很多网络流题集题解参考. 最大流模板 ( 可处理重边 ) const int maxn = 1e6 + 10; const int INF = 0x3f3f3f3 ...
- 乌鲁木齐网络赛J题(最小费用最大流模板)
ACM ICPC 乌鲁木齐网络赛 J. Our Journey of Dalian Ends 2017-09-09 17:24 243人阅读 评论(0) 收藏 举报 分类: 网络流(33) 版权声 ...
- 【最小费用可行流模板】
可能再也用不到了吧,今天整理电脑文件看到的,作为图论选手,留个纪念, //原图: 对于pi,拆点xi,yi s->S,[m,m],0 S->xi,[0,inf],0 yi->t,[0 ...
- 网络流之——最小费用最大流
学习最小费用最大流前,需要学习最大流算法.在最大流算法中,没有考虑边的费用问题.在MinCostMaxFlow中,引入了费用的概念:cij表示边(i,j)单位流量的费用.在满足流量=v(f)的同时,并 ...
最新文章
- Java 8 的 JVM 有多快?Fork-Join 性能基准测试
- Linux下bash的PS1
- 51单片机有几个通用io口_51单片机IO口的四种使用方法
- 业内首款云原生技术中台产品云原生 Stack 来了
- mysql基本介绍和优化技巧
- (转)分布式文件存储FastDFS(六)FastDFS多节点配置
- 深度探索QT窗口系统——几何篇
- Java基础---其他对象
- hive concat_w实现将多行记录合并成一行
- sql语句智能提示插件
- 中国系泊系统行业市场供需与战略研究报告
- (二)计算软件的安装:truegrid、ls-prepost、ls-dyna
- 关于百度移动端搜索中结果聚合的几个常见案例分析
- 231个web前端的javascript特效分享
- 服务器显示阵列卡升级,dell r730服务器更换阵列卡后报错,弹出黑框
- svn的安装linux
- 重装系统开机蓝屏0x0000007E错误但是可以进入安全模式
- Unity 3D课程总结
- 初识linux之进程
- 4万字【Python高级编程】保姆式教学,Python大厂高频面试题解析