实现功能:首行输入N,M,S,T,代表这张图N个点,M条边,源点为S,汇点为T;接下来T行输入个边的出发点、终点和权值;输出最大流
原理:sap网络流算法(详见,个人觉得这个模板已经不错了,虽然本人暂时还未考虑引入邻接表进行优化)(推荐模板题:)
1 var 2 i,j,k,l,m,n,ans,aug,s,t,tmp,jl,mi:longint; 3 flag:boolean; 4 vh,dis,di,his,pre:array[0..10000] of longint; 5 map:array[0..2050,0..2050] of longint; 6 function min(x,y:longint):longint;inline; 7 begin 8 if x0) and (dis[i]=(dis[j]+1)) then29 begin30 aug:=min(aug,map[i,j]);31 pre[j]:=i;di[i]:=j;32 i:=j;flag:=true;33 if i=t then34 begin35 ans:=ans+aug;36 while i<>s do37 begin38 tmp:=i;39 i:=pre[i];40 map[i,tmp]:=map[i,tmp]-aug;41 map[tmp,i]:=map[tmp,i]+aug;42 end;43 aug:=maxlongint;44 end;45 break;46 end;47 end;48 if flag then continue;49 jl:=-1;mi:=n-1;50 for j:=1 to n do51 begin52 if (map[i,j]>0) and (dis[j] s then64 begin65 i:=pre[i];66 aug:=his[i];67 end;68 end;69 writeln(ans);70 end.71