题面:【模板】最小费用最大流

代码:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<queue>
  5. #define ll long long
  6. #define min(a,b) ((a)<(b)?(a):(b))
  7. #define max(a,b) ((a)>(b)?(a):(b))
  8. using namespace std;
  9. inline ll rd(){
  10. ll x=,f=;char c=getchar();
  11. while(c<''||c>''){if(c=='-')f=-; c=getchar();}
  12. while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
  13. return f*x;
  14. }
  15. const int maxn=,maxm=;
  16. int N,M,num_edge=-,edge_head[maxn],S,T,u,v,w,f,pre[maxn];
  17. ll Dis[maxn],Fw[maxn],mxfw,mndis;
  18. bool vis[maxn];
  19. queue<int>Q;
  20. struct Edge{int to,nx,from;ll dis,fw;}edge[maxm<<];
  21. inline void Add_edge(int from,int to,ll fw,ll dis){
  22. edge[++num_edge].nx=edge_head[from];
  23. edge[num_edge].from=from;
  24. edge[num_edge].to=to;
  25. edge[num_edge].fw=fw;
  26. edge[num_edge].dis=dis;
  27. edge_head[from]=num_edge;
  28. return;
  29. }
  30. inline bool SPFA(){
  31. // for(int i=1;i<=N;i++)
  32. // Dis[i]=Fw[i]=1ll<<60;
  33. memset(Dis,0x7f,sizeof(Dis));
  34. memset(Fw,0x7f,sizeof(Fw));
  35. memset(vis,,sizeof(vis));
  36. pre[S]=pre[T]=-;//Imp
  37. Q.push(S);
  38. vis[S]=;
  39. Dis[S]=;
  40. while(!Q.empty()){
  41. int x=Q.front();
  42. Q.pop();
  43. vis[x]=;
  44. for(int i=edge_head[x];i!=-;i=edge[i].nx){
  45. int y=edge[i].to;
  46. if(edge[i].fw&&edge[i].dis+Dis[x]<Dis[y]){
  47. Dis[y]=edge[i].dis+Dis[x];
  48. Fw[y]=min(Fw[x],edge[i].fw);//这一步和Dinic差不多
  49. pre[y]=i;
  50. if(vis[y]==){
  51. Q.push(y);
  52. vis[y]=;
  53. }
  54. }
  55. }
  56. }
  57. if(pre[T]!=-)return ;
  58. return ;
  59. }
  60. inline void FYL(){
  61. mxfw=mndis=;
  62. while(SPFA()){
  63. mxfw+=Fw[T];
  64. mndis+=Dis[T]*Fw[T];
  65. for(int i=pre[T];i!=-;i=pre[edge[i].from]){
  66. edge[i].fw-=Fw[T];
  67. edge[i^].fw+=Fw[T];
  68. }
  69. }
  70. return;
  71. }
  72. int main(){
  73. memset(edge_head,-,sizeof(edge_head));
  74. N=rd();M=rd();S=rd();T=rd();
  75. for(int i=;i<=M;i++){
  76. u=rd();v=rd();w=rd();f=rd();
  77. Add_edge(u,v,w,f);
  78. Add_edge(v,u,,-f);
  79. }
  80. FYL();
  81. printf("%lld %lld\n",mxfw,mndis);
  82. return ;
  83. }

By:AlenaNuna

费用流+SPFA ||【模板】最小费用最大流的更多相关文章

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

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

  2. 【洛谷 p3381】模板-最小费用最大流(图论)

    题目:给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 解法:在Dinic的基础下做spfa算法. 1 #include<cst ...

  3. hdu3667 Transportation 费用与流量平方成正比的最小流 拆边法+最小费用最大流

    /** 题目:hdu3667 Transportation 拆边法+最小费用最大流 链接:http://acm.hdu.edu.cn/showproblem.php?pid=3667 题意:n个城市由 ...

  4. 洛谷.3381.[模板]最小费用最大流(zkw)

    题目链接 Update:我好像刚知道多路增广就是zkw费用流.. //1314ms 2.66MB 本题优化明显 #include <queue> #include <cstdio&g ...

  5. P3381 [模板] 最小费用最大流

    EK  + dijkstra (2246ms) 开氧气(586ms) dijkstra的势 可以处理负权 https://www.luogu.org/blog/28007/solution-p3381 ...

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

    P3381 [模板]最小费用最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行 ...

  7. ACM/ICPC 之 卡卡的矩阵旅行-最小费用最大流(可做模板)(POJ3422)

    将每个点拆分成原点A与伪点B,A->B有两条单向路(邻接表实现时需要建立一条反向的空边,并保证环路费用和为0),一条残留容量为1,费用为本身的负值(便于计算最短路),另一条残留容量+∞,费用为0 ...

  8. 图论算法-最小费用最大流模板【EK;Dinic】

    图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...

  9. P3381 【模板】最小费用最大流 题解

    CSDN同步 原题链接 前置知识: 从三种算法剖析网络流本质 简要题意: 给定网络图,求图的最大流,以及流量为最大流时的最小费用. 现在假设你们看了那篇网络流博客之后,所有人都会了 \(\text{E ...

  10. poj 2195 二分图带权匹配+最小费用最大流

    题意:有一个矩阵,某些格有人,某些格有房子,每个人可以上下左右移动,问给每个人进一个房子,所有人需要走的距离之和最小是多少. 貌似以前见过很多这样类似的题,都不会,现在知道是用KM算法做了 KM算法目 ...

随机推荐

  1. 企业链表C语言实现

    /* * LinkList.h * * Created on: 2019年7月20日 * Author: Administrator */ #ifndef SRC_LINKLIST_H_ #defin ...

  2. JRE、JDK、JVM 及 JIT 之间有什么不同

    java虚拟机(JVM)     使用java编程语言的主要优势就是平台的独立性.你曾经想知道过java怎么实现平台的独立性吗?对,就是虚拟机,它抽象化了硬件设备,开发者和他们的程序的得以操作系统.虚 ...

  3. KVM 常用命令

    显示虚拟机 virsh list --all 停止虚拟机 virsh destroy <name> 启动虚拟机 virsh start <name> 删除虚拟机 virsh u ...

  4. kafka window安装与配置

    一.安装jdk1.8(此处省略) 二.安装zookeeper1. 下载安装包:http://zookeeper.apache.org/releases.html,解压到指定目录(如下) 2. 在系统变 ...

  5. leetcode 138. Copy List with Random Pointer复杂链表的复制

    python代码如下: # Definition for singly-linked list with a random pointer. # class RandomListNode(object ...

  6. Unsupervised Image-to-Image Translation Networks

    Abstract: 无监督图像到图像的翻译目的是学习不同域图像的一个联合分布,通过使用来自单独域图像的边缘分布.给定一个边缘分布,可以得到很多种联合分布.如果不加入额外的假设条件的话,从边缘分布无法推 ...

  7. Jenkins安装以及配置

    Jenkins介绍 Jenkins是一个java开发的.开源的.非常好用持续集成的工具,它能帮我们实现自动化部署环境.测试.打包等等的工作,还可以在构建任务成功或者失败之后给我们发邮件通知. 什么叫持 ...

  8. C#通用类库

    http://www.cnblogs.com/feiyangqingyun/archive/2010/12/20/1911630.html

  9. Activity启动流程(三)

    这里对启动Activity过程中涉及到的ActivityStack.TaskRecord.ActivityRecord.ActivityStackSupervisor进行简单的分析,实际上一张时序图就 ...

  10. Elasticsearch5安装以及部署Head插件

    请看完再动手,两篇文章都是找来的,合并在一起了,前半部分是参考,我是按照后半部分做的,而且执行中间也有坑. Elasticsearch5.X及 head插件 安装说明: 1.下载elasticsear ...