【codevs1993】草地排水(最大流)
最近学了最大流,于是去codevs找了几道最大流裸题(这是我第一次写网络流)。
题目大意:求一个图的最大流(就是这样的裸题)
第一次A网络流的题,发个博客纪念一下。
var n,m,i,j,k,h,t,x,y,z,ans:longint; a:array[0..410,0..410]of longint; q,l:array[0..510]of longint; function dfs(now,p:longint):longint; var i,ll:longint; begin if now=n then exit(p); for i:=1 to n do if(l[now]+1=l[i])and(a[now,i]>0)then begin if a[now,i]>p then ll:=dfs(i,p) else ll:=dfs(i,a[now,i]); a[now,i]:=a[now,i]-ll; a[i,now]:=a[i,now]+ll; if ll>0 then exit(ll); end; exit(0); end; begin read(m,n); for i:=1 to m do begin read(x,y,z); a[x,y]:=a[x,y]+z; end; ans:=0; while true do begin for i:=1 to n do l[i]:=0; h:=1; t:=1; q[1]:=1; l[1]:=1; repeat for i:=1 to n do if(l[i]=0)and(a[q[h],i]>0)then begin inc(t); q[t]:=i; l[i]:=l[q[h]]+1; end; inc(h); until h>t; if l[n]=0 then break; repeat k:=dfs(1,maxint); ans:=ans+k; until k=0; end; writeln(ans); end.