算法模板——Dinic网络最大流 2
2015-04-19 21:53
417 查看
实现功能:同Dinic网络最大流 1
这个新的想法源于Dinic费用流算法。。。
在费用流算法里面,每次处理一条最短路,是通过spfa的过程中就记录下来,然后顺藤摸瓜处理一路
于是在这个里面我的最大流也采用这种模式,这样子有效避免的递归,防止了爆栈么么哒
这个新的想法源于Dinic费用流算法。。。
在费用流算法里面,每次处理一条最短路,是通过spfa的过程中就记录下来,然后顺藤摸瓜处理一路
于是在这个里面我的最大流也采用这种模式,这样子有效避免的递归,防止了爆栈么么哒
type point=^node; node=record g,w:longint; next,anti:point; end; var i,j,k,l,m,n,s,t,flow:longint; a,e:array[0..10000] of point; c,d:array[0..10000] of longint; function min(x,y:longint):longint; begin if x<y then min:=x else min:=y; end; procedure add(x,y,z:longint); var p:point; begin new(p);p^.g:=y;p^.w:=z;p^.next:=a[x];a[x]:=p; new(p);p^.g:=x;p^.w:=0;p^.next:=a[y];a[y]:=p; a[x]^.anti:=a[y];a[y]^.anti:=a[x]; end; function spfa:boolean; var p:point;f,r:longint; begin fillchar(c,sizeof(c),255); d[1]:=s;f:=1;r:=2;c[s]:=0; while f<r do begin p:=a[d[f]]; while p<>nil do begin if (p^.w<>0) and (c[p^.g]=-1) then begin c[p^.g]:=c[d[f]]+1; e[p^.g]:=p; d[r]:=p^.g;inc(r); end; p:=p^.next; end; inc(f); end; exit(c[t]<>-1); end; procedure calc; //“顺藤摸瓜”模式有效避免了递归带来的爆栈隐患 begin i:=t;l:=maxlongint; while i<>s do begin l:=min(l,e[i]^.w); i:=e[i]^.anti^.g; end; i:=t;inc(flow,l); while i<>s do begin if e[i]^.w<>maxlongint then dec(e[i]^.w,l); if e[i]^.anti^.w<>maxlongint then inc(e[i]^.anti^.w,l); i:=e[i]^.anti^.g; end; end; begin readln(m,n,s,t); for i:=1 to n do a[i]:=nil; for i:=1 to m do begin readln(j,k,l); add(j,k,l); end; flow:=0;while spfa do calc; writeln(flow); readln; end.
相关文章推荐
- 算法模板——Dinic网络最大流 1
- 【模板】Dinic求网络最大流
- 算法模板——sap网络最大流 1(非递归+邻接矩阵)
- 网络最大流(dinic)【模板】
- 网络最大流增广路模板(EK & Dinic)
- 网络最大流(dinic)模板
- 【模板】网络最大流 (Dinic)
- NYOJ 323 Drainage Ditches 最大流 Dinic 算法模板
- 算法模板——sap网络最大流 2(非递归+邻接表)
- 算法模板——sap网络最大流 3(递归+邻接矩阵)
- 网络最大流增广路模板(EK & Dinic)
- HDU 1532-Drainage Ditches(网络最大流,EK,Ford-Fulkerson,dinic3种算法套模板)
- 算法模板——sap网络最大流 3(递归+邻接表)
- 网络最大流之dinic模板
- 【模板】二分图最大匹配(匈牙利算法)
- 二分图最大匹配 匈牙利算法模板
- [模板练习]网络最大流
- 二分图最大匹配算法-匈牙利算法(Hungary)模板
- luogu3376 【模板】网络最大流
- 我的模板 最大流(Dinic & Isap)+最小费用最大流(SPFAFlow)==有更改