- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Noip图论整理
图论程序整理
Edmonds-Karp
var
ans,i,j,k,s,t,tot,m,n,a,b,c:longint;
u,v,w,next,other:array[0..200] of longint;
point,d,q,pre:array[0..200] of longint;
function min(a,b:longint):longint;
begin
if ab then exit(b) else exit(a);
end;
procedure add_edge(a,b,c:longint);
begin
inc(k);u[k]:=a;v[k]:=b;w[k]:=c;
next[k]:=point[a];point[a]:=k;other[k]:=k+1;
inc(k);u[k]:=b;v[k]:=a;w[k]:=0;
next[k]:=point[b];point[b]:=k;other[k]:=k-1;
end;
function found:boolean;
var j,head,tail:longint;
begin
head:=0;tail:=1;q[1]:=s;
fillchar(d,sizeof(d),127);
d[s]:=0;
while headtail do
begin
inc(head);
j:=point[q[head]];
while j0 do
begin
if (w[j]0) and (d[u[j]]+1d[v[j]]) then
begin
d[v[j]]:=d[u[j]]+1;
pre[v[j]]:=j;
inc(tail);q[tail]:=v[j];
if v[j]=t then exit(true);
end;
j:=next[j];
end;
end;
exit(false);
end;
procedure augment;
var
p,flow:longint;
begin
p:=t;
flow:=maxlongint;
while ps do
begin
flow:=min(flow,w[pre[p]]);
p:=u[pre[p]];
end;
ans:=ans+flow;
p:=t;
while ps do
begin
dec(w[pre[p]],flow);
inc(w[other[pre[p]]],flow);
p:=u[pre[p]];
end;
end;
begin
readln(m,n);
s:=1;t:=n;tot:=n;
fillchar(point,sizeof(point),0);
k:=0;
for i:=1 to m do
begin
read(a,b,c);
add_edge(a,b,c);
end;
ans:=0;
while found do augment;
writeln(ans);
end.
Dinic
var
map:array[0..201,0..201]of longint;
dis,q:array[0..201]of longint;
visit:array[0..201]of boolean;
n,m,ans:longint;
procedure init;
var u,v,s,i:longint;
begin
readln(m,n);
for i:=1 to m do
begin
readln(u,v,s);
inc(map[u,v],s);
end;
end;
function can_build:boolean;
var sum,i,len,head,u,v:longint;
begin
can_build:=false;
fillchar(visit,sizeof(visit),false);
q[0]:=n; visit[n]:=true; dis[n]:=0;
len:=0; head:=0;
while head=len do
begin
u:=q[head];
for v:=1 to n do
if (not visit[v])and(map[v][u]0) then
begin
inc(len);
q[len]:=v;
visit[v]:=true;
文档评论(0)