一直由于某些原因耽搁着...最小费用最大流没有搞会。

  今天趁着个人状态正佳,赶紧去看看,果然30min不到看会了算法+模板并且A掉了一道题。

  感觉最小费用最大流在学过了最大流之后还是挺好理解的。找到从起点到终点流过1单位流量的最小花费方案,然后更新数据。

  不停地找增广路,不停累计答案,不停趋近最优解。

  理解起来没有任何问题。代码书写一遍就过了很顺利。


POJ2135

  实际上是一道并不那么容易套的模板题。

  网络流的题目重在建模。这道题就是这样。

  求起点到终点往返的最短路径,但不能经过相同的边。

  往返一遍等同于从起点到终点走两遍。

  乍一看觉得很像二取方格数,然后想到了最近A掉的K取方格数,就是用网络流算法。于是想到了网络流。

  我们用流量为1来控制每条边只经过一次,然后增加一个源点和汇点,分别连0,n流量为2。

  这样建模就建好啦!

  但是刚刚想到了一个问题,来回两次的边都赋予了1的流量,这样不是可以来回各经过一次吗?

  即这种情况。

  红-蓝-绿-黄是一条已经取好的路径。

  当橙色边费用接近正无穷的时候,橙色点就会到绿-蓝-紫-黄

  这样就经过了绿边两次。

  但是很快发现这样的情况是不存在的。

  完全可以取红-蓝-紫+红-橙-绿-黄,这样还减少了两条绿边的费用。题目中保证费用>0,所以这时我们可以发现这样的情况是不存在的。

  于是代码就可以放心地敲起来啦!

(本来想再做几道最小费用最大流的题练练代码熟练度的,但由于时间比较紧...突然发现今天是周五,省选周一报到...本来印象中的还有三四天没想到是周末QAQ 然后得知明天下午还放假这样一来就根本没有

时间可以准备啦!所以鉴于这些原因...还是多留点时间给复习不熟练的东西吧)


program poj2135;
const maxn=;maxm=;
var n,m,i,j,x,y,z:longint;
link,opt,dis,pre:array[-..maxn]of longint;
vis:array[-..maxn]of boolean;
fa,from,next,w,c,rev:array[-..maxm]of longint; function min(a,b:longint):longint;
begin
if a<b then exit(a) else exit(b);
end; procedure add(x,y,z,cc:longint);
begin
inc(j);fa[j]:=y;from[j]:=x;next[j]:=link[x];link[x]:=j;w[j]:=z;c[j]:=cc;rev[j]:=j+;
inc(j);fa[j]:=x;from[j]:=y;next[j]:=link[y];link[y]:=j;w[j]:=-z;c[j]:=;rev[j]:=j-;
end; function spfa:boolean;
var head,tail,x,j:longint;
begin
fillchar(dis,sizeof(dis),);
fillchar(vis,sizeof(vis),true);
head:=;tail:=;
opt[]:=;vis[]:=false;dis[]:=;
while head<>tail do
begin
head:=(head+) mod maxn;
x:=opt[head];j:=link[x];
while j<> do
begin
if (c[j]>)and(dis[x]+w[j]<dis[fa[j]]) then
begin
dis[fa[j]]:=dis[x]+w[j];
pre[fa[j]]:=j;
if vis[fa[j]] then
begin
tail:=(tail+) mod maxn;
opt[tail]:=fa[j];
end;
end;
j:=next[j];
end;
vis[x]:=true;
end;
if dis[n+]<>dis[-] then exit(true) else exit(false);
end; function MCMF:longint;
var ans,x,sum:longint;
begin
ans:=;
while spfa do
begin
sum:=maxlongint;
x:=n+;
while x<> do
begin
sum:=min(sum,c[pre[x]]);
x:=from[pre[x]];
end;
x:=n+;
while x<> do
begin
inc(ans,sum*w[pre[x]]);
dec(c[pre[x]],sum);
inc(c[rev[pre[x]]],sum);
x:=from[pre[x]];
end;
end;
exit(ans);
end; begin
assign(input,'poj2135.in');reset(input);
readln(n,m);j:=;
for i:= to m do
begin
readln(x,y,z);
add(x,y,z,);add(y,x,z,);
end;
add(,,,);add(n,n+,,);
writeln(MCMF);
end.

  

[POJ2135]最小费用最大流的更多相关文章

  1. POJ2135 最小费用最大流模板题

    练练最小费用最大流 此外此题也是一经典图论题 题意:找出两条从s到t的不同的路径,距离最短. 要注意:这里是无向边,要变成两条有向边 #include <cstdio> #include ...

  2. poj2135最小费用最大流经典模板题

    Farm Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13509   Accepted: 5125 Descri ...

  3. POJ2135 Farm Tour —— 最小费用最大流

    题目链接:http://poj.org/problem?id=2135 Farm Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  4. POJ 2135 Farm Tour (最小费用最大流模板)

    题目大意: 给你一个n个农场,有m条道路,起点是1号农场,终点是n号农场,现在要求从1走到n,再从n走到1,要求不走重复路径,求最短路径长度. 算法讨论: 最小费用最大流.我们可以这样建模:既然要求不 ...

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

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

  6. [板子]最小费用最大流(Dijkstra增广)

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

  7. bzoj1927最小费用最大流

    其实本来打算做最小费用最大流的题目前先来点模板题的,,,结果看到这道题二话不说(之前打太多了)敲了一个dinic,快写完了发现不对 我当时就这表情→   =_=你TM逗我 刚要删突然感觉dinic的模 ...

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

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

  9. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

随机推荐

  1. Vm-Ubuntu下配置Qt开发环境

    在昨天的Ubuntu换降下,安装Qt发现编译的时候是缺少opengl的 奈何找了好多方式都无法安装opengl 今天看到另一位大神写的,才发下自己找的还是有问题 大神帖子网址:http://blog. ...

  2. 数据库学习(四)with as (补充 nvl 和 count 函数)

    with as 的专业解释我这就不详细说明了,我这就梳理下我自己的实践应用,就是根据某个条件查询出结果集放在一个临时表里面,可以创建多个临时表,然后再从这些临时表中查询出要的数据. 参考资料:http ...

  3. Python学习笔记(二)一一一字典总结

    创建方式:1 直接创建     newDictonary={‘key’:'value',} 2 列表转字典(dict函数) 3 基本操作:len 返回总数 dictionary[k]  返回k对应的值 ...

  4. 第九篇 Python数据类型之集合

    集合 set 写在最前,必须要会的:1.长度len2.成员运算in和not in3.|合集4.&交集5.-差集6.^对称差集7.==8.父集:>,>= 9.子集:<,< ...

  5. 机器学习/逻辑回归(logistic regression)/--附python代码

    个人分类: 机器学习 本文为吴恩达<机器学习>课程的读书笔记,并用python实现. 前一篇讲了线性回归,这一篇讲逻辑回归,有了上一篇的基础,这一篇的内容会显得比较简单. 逻辑回归(log ...

  6. Visual Studio 2012安装包

    点击下载

  7. SVM知识点

    SVM(Support Vector Machine),支持向量机,有监督学习模型,一种分类模型.在特征空间(输入空间为欧式空间或离散集合,特征空间为欧式空间或希尔伯特空间)中寻找间隔最大化的分离超平 ...

  8. 多文件上传 input 的multiple 属性

    一.上传多张图片并且预览 HTML: <div class="container"> <label>请选择一个图像文件:</label> < ...

  9. 官方文档 恢复备份指南八 RMAN Backup Concepts

    本章内容 Consistent and Inconsistent RMAN Backups Online Backups and Backup Mode Backup Sets Image Copie ...

  10. UVA 1085 House of Cards(对抗搜索)

    Description   Axel and Birgit like to play a card game in which they build a house of cards, gaining ...