最小费用最大流板子,没有压行。利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多。教程略去。转载请随意。

 #include <cstdio>
 #include <cstring>
 #include <algorithm>
 #include <functional>
 #include <queue>
 using namespace std;

 ;
 const int inf = 0x33333333;
 typedef pair<int, int> int2;

 struct edge {
     int to, rev, cap, cost;
 };

 int n;
 vector<edge> G[maxn];

 void add_edge(int u, int v, int cap, int cost) {
     G[u].push_back((edge){v, (int)G[v].size(), cap, cost});
     G[v].push_back((edge){u, (, , -cost});
 }

 int2 mcmf(int s, int t) {
     //init
     static int h[maxn];        //标号
     , cost = ;
     //solve
     while(true) {
         //dijkstra init
         static int dist[maxn]; //距离
         static int pv[maxn];   //上一个顶点
         static int pe[maxn];   //上一条弧
         memset(dist, 0x33, sizeof dist);
         dist[s] = ;
         priority_queue< int2, vector<int2>, greater<int2> > q;
         q.push(int2(, s));
         //dijkstra
         while(!q.empty()) {
             int2 x = q.top();
             q.pop();
             int u = x.second;
             if(x.first != dist[u]) {
                 continue;
             }
             if(u == t) {
                 break;
             }
             ; i < (int)G[u].size(); ++i) {
                 edge &e = G[u][i];
                 int newcost = e.cost + h[u] - h[e.to];
                  && dist[e.to] > dist[u] + newcost) {
                     dist[e.to] = dist[u] + newcost;
                     q.push(int2(dist[e.to], e.to));
                     pv[e.to] = u;
                     pe[e.to] = i;
                 }
             }
         }
         if(dist[t] == inf) {
             break;
         }
         //augment
         ; i < n; ++i) {
             h[i] = min(h[i] + dist[i], inf);
         }
         int newflow = inf;
         for(int x = t; x != s; x = pv[x]) {
             edge &e = G[pv[x]][pe[x]];
             newflow = min(newflow, e.cap);
         }
         flow += newflow;
         cost += newflow * h[t];
         for(int x = t; x != s; x = pv[x]) {
             edge &e = G[pv[x]][pe[x]];
             e.cap -= newflow;
             G[x][e.rev].cap += newflow;
         }
     }
     return make_pair(flow, cost);
 }

 int main(void) {
     int m, source, sink;
     scanf("%d%d%d%d", &n, &m, &source, &sink), --source, --sink;
     ; i < m; ++i) {
         int u, v, cap, cost;
         scanf("%d%d%d%d", &u, &v, &cap, &cost), --u, --v;
         add_edge(u, v, cap, cost);
     }
     int2 ans = mcmf(source, sink);
     printf("%d %d\n", ans.first, ans.second);
     ;
 }

[板子]最小费用最大流(Dijkstra增广)的更多相关文章

  1. 【Luogu】P3381最小费用最大流模板(SPFA找增广路)

    题目链接 哈  学会最小费用最大流啦 思路是这样. 首先我们有一个贪心策略.如果我们每次找到单位费用和最短的一条增广路,那么显然我们可以把这条路添加到已有的流量里去——不管这条路的流量是多大,反正它能 ...

  2. UVa 10806 Dijkstra,Dijkstra(最小费用最大流)

    裸的费用流.往返就相当于从起点走两条路到终点. 按题意建图,将距离设为费用,流量设为1.然后增加2个点,一个连向节点1,流量=2,费用=0;结点n连一条同样的弧,然后求解最小费用最大流.当且仅当最大流 ...

  3. POJ 2135 Farm Tour (网络流,最小费用最大流)

    POJ 2135 Farm Tour (网络流,最小费用最大流) Description When FJ's friends visit him on the farm, he likes to sh ...

  4. 经典贪心算法(哈夫曼算法,Dijstra单源最短路径算法,最小费用最大流)

    哈夫曼编码与哈夫曼算法 哈弗曼编码的目的是,如何用更短的bit来编码数据. 通过变长编码压缩编码长度.我们知道普通的编码都是定长的,比如常用的ASCII编码,每个字符都是8个bit.但在很多情况下,数 ...

  5. POJ 2135 最小费用最大流 入门题

    Farm Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19207   Accepted: 7441 Descri ...

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

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

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

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

  8. POJ 2195:Going Home(最小费用最大流)

    http://poj.org/problem?id=2195 题意:有一个地图里面有N个人和N个家,每走一格的花费是1,问让这N个人分别到这N个家的最小花费是多少. 思路:通过这个题目学了最小费用最大 ...

  9. 最小费用最大流 POJ2195-Going Home

    网络流相关知识参考: http://www.cnblogs.com/luweiseu/archive/2012/07/14/2591573.html 出处:優YoU http://blog.csdn. ...

随机推荐

  1. afxcomctl32.h与afxcomctl32.inl报错

    afxcomctl32.h与afxcomctl32.inl报错 编译公司一个几年前的老项目,是从VC6.0升级到VS2005的. 1.编译时报缺少头文件,于是附件包含目录,于是出现了以下报错: 1&g ...

  2. springmvc配置文件web.xml详解各方总结(转载)

    Spring分为多个文件进行分别的配置,其中在servlet-name中如果没有指定init-param属性,那么系统自动寻找的spring配置文件为[servlet-name]-servlet.xm ...

  3. gearman 安装

    yum install gperfyum install libevent-develyum install libuuid-develwget https://launchpad.net/gearm ...

  4. HttpClient调用webApi时注意的小问题

    HttpClient client = new HttpClient(); client.BaseAddress = new Uri(thisUrl); client.GetAsync("a ...

  5. linux(七)__shell脚本编程

    一.什么是shell脚本 shell除了是命令解释器之外还是一种编程语言,用shell编写的程序类似于DOS下的批处理程序. 它是用户与操作系统之间的一个接口. shell脚本语言非常擅长处理文本类型 ...

  6. Position属性四个值:static、fixed、relative、absolute的区别和用法

    1.static(静态定位):默认值.没有定位,元素出现在正常的文档流中(如果设置 top, bottom, left, right, z-index这些属性就不起做作了). 2.relative(相 ...

  7. webView 自适应高度 document.body 属性

    前段时间开发遇到webView 高度自适应问题,用最初的方法无效,找了些资料,记录下. 1.若网页中含有< !DOCTYPE html PUBLIC "-//W3C//DTD XHTM ...

  8. android textview 自动换行 整齐排版

    一.问题在哪里? textview显示长文字时会进行自动折行,如果遇到一些特殊情况,自动折行会杯具成这个样子: 上述特殊情况包括: 1)全角/半角符号混排(一般是数字.字母.汉字混排) 2)全角/半角 ...

  9. js图片前端预览之 filereader 和 window.URL.createObjectURL

    //preview img : filereader方式 document.getElementById('imgFile').onchange = var ele = document.getEle ...

  10. Sybase_游标

    本章将介绍如何在Sybase下使用游标 因业务需要,要批量处理一些数据,sql需要用到循环,所以要使用游标,我写了一个简单的游标,sql如下 DECLARE my_Cursor CURSOR FOR ...