[板子]最小费用最大流(Dijkstra增广)
最小费用最大流板子,没有压行。利用重标号让边权非负,用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增广)的更多相关文章
- 【Luogu】P3381最小费用最大流模板(SPFA找增广路)
题目链接 哈 学会最小费用最大流啦 思路是这样. 首先我们有一个贪心策略.如果我们每次找到单位费用和最短的一条增广路,那么显然我们可以把这条路添加到已有的流量里去——不管这条路的流量是多大,反正它能 ...
- UVa 10806 Dijkstra,Dijkstra(最小费用最大流)
裸的费用流.往返就相当于从起点走两条路到终点. 按题意建图,将距离设为费用,流量设为1.然后增加2个点,一个连向节点1,流量=2,费用=0;结点n连一条同样的弧,然后求解最小费用最大流.当且仅当最大流 ...
- POJ 2135 Farm Tour (网络流,最小费用最大流)
POJ 2135 Farm Tour (网络流,最小费用最大流) Description When FJ's friends visit him on the farm, he likes to sh ...
- 经典贪心算法(哈夫曼算法,Dijstra单源最短路径算法,最小费用最大流)
哈夫曼编码与哈夫曼算法 哈弗曼编码的目的是,如何用更短的bit来编码数据. 通过变长编码压缩编码长度.我们知道普通的编码都是定长的,比如常用的ASCII编码,每个字符都是8个bit.但在很多情况下,数 ...
- POJ 2135 最小费用最大流 入门题
Farm Tour Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19207 Accepted: 7441 Descri ...
- 经典网络流题目模板(P3376 + P2756 + P3381 : 最大流 + 二分图匹配 + 最小费用最大流)
题目来源 P3376 [模板]网络最大流 P2756 飞行员配对方案问题 P3381 [模板]最小费用最大流 最大流 最大流问题是网络流的经典类型之一,用处广泛,个人认为网络流问题最具特点的操作就是建 ...
- ACM/ICPC 之 卡卡的矩阵旅行-最小费用最大流(可做模板)(POJ3422)
将每个点拆分成原点A与伪点B,A->B有两条单向路(邻接表实现时需要建立一条反向的空边,并保证环路费用和为0),一条残留容量为1,费用为本身的负值(便于计算最短路),另一条残留容量+∞,费用为0 ...
- POJ 2195:Going Home(最小费用最大流)
http://poj.org/problem?id=2195 题意:有一个地图里面有N个人和N个家,每走一格的花费是1,问让这N个人分别到这N个家的最小花费是多少. 思路:通过这个题目学了最小费用最大 ...
- 最小费用最大流 POJ2195-Going Home
网络流相关知识参考: http://www.cnblogs.com/luweiseu/archive/2012/07/14/2591573.html 出处:優YoU http://blog.csdn. ...
随机推荐
- User Growth Using Deeplink. (part1)
转载请注明来源 http://www.cnblogs.com/hucn/p/5917924.html 活跃人数是衡量app一项关键指标, dau, mau, 有了流量才能给业务发展提供养分和空间. a ...
- helios架构详解(一)服务器端架构
看了“菜鸟耕地”的”.NET开源高性能Socket通信中间件Helios介绍及演示“,觉得这个东西不错.但是由于没有网络编程知识,所以高性能部分我就讲不出来了,主要是想根据开源代码跟大家分享下Heli ...
- Maven环境配置
1.下载Maven: 下载地址:http://maven.apache.org/ 2..安装 Maven 如果需要使用到 Maven ,必须首先安装 Maven , Maven 的下载地址在 Apac ...
- arcengine中自定义工具和自带工具条(ICommand)点击后和其他工具使用的冲突
自己系统中本身对于放大缩小等功能直接是单独重写的,但是如果在加一个工具条具有相同功能的话两者之间会有一些冲突,为解决该冲突可以重写工具条的OnItemClick事件 该工具条命名为axTool 我本身 ...
- WCF入门教程3——WCF通信模式
本章内容 请求/响应模式 单工模式 双工模式 WCF异步调用 请求与响应模式 请求/响应 请求/响应通信是指客户端向服务端发送消息后,服务端会向客户端发送响应.这也意味着在接收到服务的响应以前 ...
- Eclipse 日期和时间格式自定义
点击下载Eclipse插件 org.eclipse.text_3.5.300.v20130515-1451.jar 覆盖下图所示的jar文件. /************************* ...
- 利用Java动态生成 PDF 文档
利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...
- node-sass 在Mac中安装报错
在做一个基于react项目要安装依赖的包时总是报一下错误 应该是node-sass的问题 找到官网下载跟我错误提示一样的文件也就是 darwin-x64-46 不同的系统不一样 修改为跟本地一样的名 ...
- iOS 汉字的拼音
获取汉字的拼音 #import <Foundation/Foundation.h> @interface NSString (Utils) /** * 汉字的拼音 * * @return ...
- ArcEngine数据删除几种方法和性能比较[转]
四个解决方案: 1.IFeatureCursor 游标查询后,遍历删除 2.更新游标删除IFeatureCursor.DeleteFeature() 3.ITable.DeleteSearchedRo ...