[板子]最小费用最大流(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. ...
随机推荐
- afxcomctl32.h与afxcomctl32.inl报错
afxcomctl32.h与afxcomctl32.inl报错 编译公司一个几年前的老项目,是从VC6.0升级到VS2005的. 1.编译时报缺少头文件,于是附件包含目录,于是出现了以下报错: 1&g ...
- springmvc配置文件web.xml详解各方总结(转载)
Spring分为多个文件进行分别的配置,其中在servlet-name中如果没有指定init-param属性,那么系统自动寻找的spring配置文件为[servlet-name]-servlet.xm ...
- gearman 安装
yum install gperfyum install libevent-develyum install libuuid-develwget https://launchpad.net/gearm ...
- HttpClient调用webApi时注意的小问题
HttpClient client = new HttpClient(); client.BaseAddress = new Uri(thisUrl); client.GetAsync("a ...
- linux(七)__shell脚本编程
一.什么是shell脚本 shell除了是命令解释器之外还是一种编程语言,用shell编写的程序类似于DOS下的批处理程序. 它是用户与操作系统之间的一个接口. shell脚本语言非常擅长处理文本类型 ...
- Position属性四个值:static、fixed、relative、absolute的区别和用法
1.static(静态定位):默认值.没有定位,元素出现在正常的文档流中(如果设置 top, bottom, left, right, z-index这些属性就不起做作了). 2.relative(相 ...
- webView 自适应高度 document.body 属性
前段时间开发遇到webView 高度自适应问题,用最初的方法无效,找了些资料,记录下. 1.若网页中含有< !DOCTYPE html PUBLIC "-//W3C//DTD XHTM ...
- android textview 自动换行 整齐排版
一.问题在哪里? textview显示长文字时会进行自动折行,如果遇到一些特殊情况,自动折行会杯具成这个样子: 上述特殊情况包括: 1)全角/半角符号混排(一般是数字.字母.汉字混排) 2)全角/半角 ...
- js图片前端预览之 filereader 和 window.URL.createObjectURL
//preview img : filereader方式 document.getElementById('imgFile').onchange = var ele = document.getEle ...
- Sybase_游标
本章将介绍如何在Sybase下使用游标 因业务需要,要批量处理一些数据,sql需要用到循环,所以要使用游标,我写了一个简单的游标,sql如下 DECLARE my_Cursor CURSOR FOR ...