[板子]最小费用最大流(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. ...
随机推荐
- Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】
原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...
- Redis简单案例(三) 连续登陆活动的简单实现
连续登陆活动,或许大家都不会陌生,简单理解就是用户连续登陆了多少天之后,系统就会送一些礼品给相应的用户.最常见的 莫过于游戏和商城这些.游戏就送游戏币之类的东西,商城就送一些礼券.正值国庆,应该也有不 ...
- mongo DB for C#
(1)Download the MongoDB C#驱动. http://www.nuget.org/packages/mongocsharpdriver/. (2) Add Reference to ...
- Visual Studio (VSIX,项目模板 )制作
下载Vsiual Studio 2012 SDK 下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=30668 提示:一定要注意 ...
- Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】
2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...
- JavaScript简单分页,兼容IE6,~3KB
简介 兼容IE6+及现代浏览器的简单分页,支持同一页面多个分页. 使用 Browser <link rel="stylesheet" href="css/GB-pa ...
- jQuery动画与特效详解
本文主要是讲解和学习jQuery的自动显隐,渐入渐出等. 1.显示和隐藏hide()和show() 对于动画来说,显示和隐藏是最基本的效果之一,本节简单介绍jQuery的显示和隐藏. 代码如下: &l ...
- 基于SAP的中国式数据分析浅谈
大数据时代,虽然多数企业数据的应用并不能称得上是“大数据”,但也证实了数据应用的重要性和影响力.确实,数据作为企业发展的信息沉淀,已成为企业的重要资产,如何有效利用数据是每个企业必须面临的课题. 这里 ...
- LDAP注入与防御解析
[目录] 0x1 LDAP介绍 0x2 LDAP注入攻击及防御 0x3 参考资料 0x1 LDAP介绍 1 LDAP出现的背景 LDAP(Lightweight Directory Access Pr ...
- 蓝牙Bluetooth技术小知识
蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...