最小费用流spfa最小费用路算法模板(pascal)
3.30:
这篇是以前写的,用的还是指针存图,今天又写了个代码,码风稍微好看点。
传送门:http://www.cnblogs.com/Currier/p/6648685.html
---------------------------------------------------一点也不华丽的分割线---------------------------------------------------------
最小费用最大流(洛谷可评测):
program rrr(input,output);
const
inf=;
type
pointer=^nodetype;
nodetype=record
t,c,w:longint;
next,rev:pointer;
end;
var
a,fre:array[..]of pointer;
p:pointer;
dis,q,frv:array[..]of longint;
v:array[..]of boolean;
n,m,s,t,x,y,c,w,i,sum,f,ans,max:longint;
function min(a,b:longint):longint;
begin
if a<b then exit(a) else exit(b);
end;
procedure ins(x,y,c,w:longint);
begin
new(p);p^.t:=y;p^.c:=c;p^.w:=w;p^.next:=a[x];a[x]:=p;
end;
procedure add(x,y,c,w:longint);
begin
ins(x,y,c,w);ins(y,x,,-w);
a[x]^.rev:=a[y];a[y]^.rev:=a[x];
end;
procedure spfa;
var
h,t:longint;
begin
for i:= to n do dis[i]:=inf;
fillchar(v,sizeof(v),false);
h:=;t:=;q[]:=s;dis[s]:=;v[s]:=true;
while h<>t do
begin
inc(h);if h> then h:=;
p:=a[q[h]];
while p<>nil do
begin
if (p^.c>) and (dis[q[h]]+p^.w<dis[p^.t]) then
begin
dis[p^.t]:=dis[q[h]]+p^.w;
frv[p^.t]:=q[h];fre[p^.t]:=p;
if not v[p^.t] then
begin
inc(t);if t> then t:=;
q[t]:=p^.t;v[p^.t]:=true;
end;
end;
p:=p^.next;
end;
v[q[h]]:=false;
end;
end;
begin
assign(input,'r.in');assign(output,'r.out');reset(input);rewrite(output);
readln(n,m,s,t);
for i:= to m do begin read(x,y,c,w);add(x,y,c,w); end;
ans:=;max:=;
while true do
begin
spfa;
if dis[t]=inf then break;
i:=t;f:=inf;
while i<>s do begin f:=min(f,fre[i]^.c);i:=frv[i]; end;
max:=max+f;
i:=t;sum:=;
while i<>s do begin fre[i]^.c:=fre[i]^.c-f;fre[i]^.rev^.c:=fre[i]^.rev^.c+f;sum:=sum+fre[i]^.w;i:=frv[i]; end;
ans:=ans+sum*f;
end;
write(max,' ',ans);
close(input);close(output);
end.
最小费用流spfa最小费用路算法模板(pascal)的更多相关文章
- 图论算法-最小费用最大流模板【EK;Dinic】
图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...
- 最大流 && 最小费用最大流模板
模板从 这里 搬运,链接博客还有很多网络流题集题解参考. 最大流模板 ( 可处理重边 ) ; const int INF = 0x3f3f3f3f; struct Edge { int from ...
- HDU3376 最小费用最大流 模板2
Matrix Again Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)To ...
- 洛谷P3381 最小费用最大流模板
https://www.luogu.org/problem/P3381 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用 ...
- 【Luogu】P3381最小费用最大流模板(SPFA找增广路)
题目链接 哈 学会最小费用最大流啦 思路是这样. 首先我们有一个贪心策略.如果我们每次找到单位费用和最短的一条增广路,那么显然我们可以把这条路添加到已有的流量里去——不管这条路的流量是多大,反正它能 ...
- 【网络流#2】hdu 1533 - 最小费用最大流模板题
最小费用最大流,即MCMF(Minimum Cost Maximum Flow)问题 嗯~第一次写费用流题... 这道就是费用流的模板题,找不到更裸的题了 建图:每个m(Man)作为源点,每个H(Ho ...
- 最小费用最大流模板 poj 2159 模板水题
Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15944 Accepted: 8167 Descr ...
- poj 2195 最小费用最大流模板
/*Source Code Problem: 2195 User: HEU_daoguang Memory: 1172K Time: 94MS Language: G++ Result: Accept ...
- luogu 3376 最小费用最大流 模板
类似EK算法,只是将bfs改成spfa,求最小花费. 为什么可以呢,加入1-3-7是一条路,求出一个流量为40,那么40*f[1]+40*f[2]+40*f[3],f[1]是第一条路的单位费用,f[2 ...
随机推荐
- 【洛谷P4556】 雨天的尾巴
题面 题解 线段树合并 我们看到这道题目首先可以想到树上差分,然后\(dfs\)合并 发现题目让我们求的东西很好用线段树维护 于是可以想到线段树合并 全世界只有我写指针版动态开点线段树(大雾 如果你要 ...
- ES6 localStorage 类库
无意中看到的,记录下. 用到了es6语法.支持在js中写构造函数 class CovLocalDB { constructor (name) { this.LS = null this.name = ...
- HBase第一章 安装 HMaster 主备
1.集群环境 Hadoop HA 集群规划 hadoop1 cluster1 nameNode HMaster hadoop2 cluster1 nameNodeStandby ZooKeeper ...
- Swoole实现h5版聊天室笔记
声明:该聊天室目前只有一对多,一对一的聊天功能,另外,因为没有使用到mysql,所以还存在比较多的缺陷地方,但知道原理就差不多了,这里主要分享下swoole简易的聊天室制作思路. 开发环境:cento ...
- Codeforces Round #500 (Div. 2) D - Chemical table
首先我们如果满足三缺一,那么必有同行和同列的点 如果两行有同列的数,我们可以设想,他们最后会全部填充成为两者啥都有的情况 显然这个是个并查集 现在我们有了很多集合,每个集合自己可以进行三缺一操作,但是 ...
- 使用PHP写ajax接口
使用PHP写ajax接口 之前有学过php都是前后端没有分离的,所以也想去了解后端是怎么写出ajax接口的,可能问了别人或者上网找了很多资料都很有有点懵,或者说直接用TP或者lavarel这些后端框架 ...
- 【bzm-Random CSV Data Set Config】 -jmeter - 文件中随机取参的方法,(插件自带)
文件中随机取参数的方法 Random CSV Data Set Config
- linux 性能分析命令及其解释
很多时候,我们需要对linux上运行的环境大体有一个了解,那么久需要大体知道当前系统的相关资源的使用情况,那么可以用一些linux提供的丰富的命令来查看 性能分析 vmstat 虚拟内存统计 用法 U ...
- Java线上应用故障排查之一:高CPU占用 (转)
一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. (友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hank ...
- xpath抓取的值有\r\n\t时,去掉的方法
解决办法: normalize-space() 例子: 原来的xpath为: user=selector.xpath('//*[@id="Con"]/tr[1]/th/text() ...