最小费用最大流板子,没有压行。利用重标号让边权非负,用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. User Growth Using Deeplink. (part1)

    转载请注明来源 http://www.cnblogs.com/hucn/p/5917924.html 活跃人数是衡量app一项关键指标, dau, mau, 有了流量才能给业务发展提供养分和空间. a ...

  2. helios架构详解(一)服务器端架构

    看了“菜鸟耕地”的”.NET开源高性能Socket通信中间件Helios介绍及演示“,觉得这个东西不错.但是由于没有网络编程知识,所以高性能部分我就讲不出来了,主要是想根据开源代码跟大家分享下Heli ...

  3. Maven环境配置

    1.下载Maven: 下载地址:http://maven.apache.org/ 2..安装 Maven 如果需要使用到 Maven ,必须首先安装 Maven , Maven 的下载地址在 Apac ...

  4. arcengine中自定义工具和自带工具条(ICommand)点击后和其他工具使用的冲突

    自己系统中本身对于放大缩小等功能直接是单独重写的,但是如果在加一个工具条具有相同功能的话两者之间会有一些冲突,为解决该冲突可以重写工具条的OnItemClick事件 该工具条命名为axTool 我本身 ...

  5. WCF入门教程3——WCF通信模式

    本章内容 请求/响应模式 单工模式 双工模式 WCF异步调用 请求与响应模式 请求/响应     请求/响应通信是指客户端向服务端发送消息后,服务端会向客户端发送响应.这也意味着在接收到服务的响应以前 ...

  6. Eclipse 日期和时间格式自定义

    点击下载Eclipse插件  org.eclipse.text_3.5.300.v20130515-1451.jar  覆盖下图所示的jar文件. /************************* ...

  7. 利用Java动态生成 PDF 文档

    利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...

  8. node-sass 在Mac中安装报错

    在做一个基于react项目要安装依赖的包时总是报一下错误 应该是node-sass的问题  找到官网下载跟我错误提示一样的文件也就是 darwin-x64-46 不同的系统不一样 修改为跟本地一样的名 ...

  9. iOS 汉字的拼音

    获取汉字的拼音 #import <Foundation/Foundation.h> @interface NSString (Utils) /** * 汉字的拼音 * * @return ...

  10. ArcEngine数据删除几种方法和性能比较[转]

    四个解决方案: 1.IFeatureCursor 游标查询后,遍历删除 2.更新游标删除IFeatureCursor.DeleteFeature() 3.ITable.DeleteSearchedRo ...