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

解法:在Dinic的基础下做spfa算法。

  1. 1 #include<cstdio>
  2. 2 #include<cstdlib>
  3. 3 #include<cstring>
  4. 4 #include<iostream>
  5. 5 #include<queue>
  6. 6 using namespace std;
  7. 7
  8. 8 const int N=5010,M=50010,INF=(int)1e9;
  9. 9 int n,m,st,ed,len=1;
  10. 10 int last[N],vis[N],id[N],pre[N],flow[N],d[N];
  11. 11 struct node{int y,fl,co,next;}a[2*M];
  12. 12 queue<int> q;
  13. 13
  14. 14 int mmin(int x,int y) {return x<y?x:y;}
  15. 15 void ins(int x,int y,int fl,int co)
  16. 16 {
  17. 17 a[++len].y=y,a[len].fl=fl,a[len].co=co;
  18. 18 a[len].next=last[x],last[x]=len;
  19. 19 a[++len].y=x,a[len].fl=0,a[len].co=-co;
  20. 20 a[len].next=last[y],last[y]=len;
  21. 21 }
  22. 22 bool spfa()
  23. 23 {
  24. 24 while (!q.empty()) q.pop();
  25. 25 for (int i=1;i<=n;i++) d[i]=INF;
  26. 26 memset(vis,0,sizeof(vis));
  27. 27 q.push(st);
  28. 28 d[st]=0,vis[st]=1,flow[st]=INF;
  29. 29 while (!q.empty())
  30. 30 {
  31. 31 int x=q.front();
  32. 32 q.pop(); vis[x]=0;
  33. 33 for (int i=last[x];i!=-1;i=a[i].next)
  34. 34 {
  35. 35 int y=a[i].y;
  36. 36 if (!a[i].fl) continue;
  37. 37 if (d[x]+a[i].co<d[y])
  38. 38 {
  39. 39 d[y]=d[x]+a[i].co;
  40. 40 flow[y]=mmin(flow[x],a[i].fl);
  41. 41 id[y]=i, pre[y]=x;
  42. 42 if (!vis[y]) q.push(y), vis[y]=1;
  43. 43 }
  44. 44 }
  45. 45 }
  46. 46 return (d[ed]!=INF);
  47. 47 }
  48. 48 void Max_flow()
  49. 49 {
  50. 50 int sum=0,cost=0;;
  51. 51 while (spfa())
  52. 52 {
  53. 53 sum+=flow[ed],cost+=d[ed]*flow[ed];
  54. 54 for (int i=ed;i!=st;i=pre[i])
  55. 55 {
  56. 56 a[id[i]].fl-=flow[ed];
  57. 57 a[id[i]^1].fl+=flow[ed];
  58. 58 }
  59. 59 }
  60. 60 printf("%d %d\n",sum,cost);
  61. 61 }
  62. 62 int main()
  63. 63 {
  64. 64 scanf("%d%d%d%d",&n,&m,&st,&ed);
  65. 65 int x,y,fl,co;
  66. 66 memset(last,-1,sizeof(last));
  67. 67 for (int i=1;i<=m;i++)
  68. 68 {
  69. 69 scanf("%d%d%d%d",&x,&y,&fl,&co);
  70. 70 ins(x,y,fl,co);
  71. 71 }
  72. 72 Max_flow();
  73. 73 return 0;
  74. 74 }

【洛谷 p3381】模板-最小费用最大流(图论)的更多相关文章

  1. 洛谷P3381 (最小费用最大流模板)

    记得把数组开大一点,不然就RE了... 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define int long long 4 ...

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

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

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

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

  4. 洛谷.4897.[模板]最小割树(Dinic)

    题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms ...

  5. 网络流_spfa最小费用最大流

    最大流: 不断搜索增广路,寻找最小的容量-流量,得到最大流量,但最大流量在有花费时不一定是最小花费. 最小费用最大流 算法思想: 采用贪心的思想,每次找到一条从源点到达汇点的花费最小的路径,增加流量, ...

  6. 洛谷P3381 最小费用最大流模板

    https://www.luogu.org/problem/P3381 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用 ...

  7. 洛谷P3381 - 【模板】最小费用最大流

    原题链接 题意简述 模板题啦~ 题解 每次都以费用作为边权求一下最短路,然后沿着最短路增广. Code //[模板]最小费用最大流 #include <cstdio> #include & ...

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

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

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

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

随机推荐

  1. Viser报错:dodge is not support linear attribute, please use category attribute!

    遇到这样的问题是因为x轴数据不能为为连续性的日期(日期格式为:YYYY-MM-DD),需要设置为分类属性(cat),有一些可能设置为timeCat,看具体情况 scale 参数支持以下类型 • ide ...

  2. Python基础语法3-输入、输出语句

  3. MySQL常用的一些(就几个)聚合函数

    聚合函数 (常用) 函数名称 描述 CONUT() 记数 SUM() 求和 AVG() 平均值 MAX() 最大值 MIN() 最小值 -- ================= 聚合函数 ====== ...

  4. LeetCode1022. 从根到叶的二进制数之和

    题目 class Solution { public: int ans = 0; int sumRootToLeaf(TreeNode* root) { dfs(root,0); return ans ...

  5. LeetCode617. 合并二叉树

    题目 1 class Solution { 2 public: 3 TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { 4 if(!t1 && ...

  6. ios获取缓存文件的大小并清除缓存

    移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为SDWebImage. 但是,离线缓存会占用手机存储空间,所以缓存清理功能基本成为资讯.购物.阅读类 ...

  7. 代码页(CodePage)列表

    代码页编号    国家地区或语言37                 IBM037    IBM EBCDIC (US-Canada)    437                 IBM437    ...

  8. 爬虫学习(三)Chrome浏览器使用

    一.新建隐身窗口 在打开隐身窗口的时候,第一次请求某个网站是没有携带cookie的,和代码请求一个网站一样,不携带cookie.这样就能够尽可能的理解代码请求某个网站的结果:除非数据是通过js加载出来 ...

  9. mysqldumpslow基本使用

    参数解释 -s, 是表示按照何种方式排序 c: 访问计数 l: 锁定时间 r: 返回记录 t: 查询时间 al:平均锁定时间 ar:平均返回记录数 at:平均查询时间 -t, 是top n的意思,即为 ...

  10. Android事件分发机制五:面试官你坐啊

    前言 很高兴遇见你~ 事件分发系列文章已经到最后一篇了,先来回顾一下前面四篇,也当个目录: Android事件分发机制一:事件是如何到达activity的? : 从window机制出发分析了事件分发的 ...