Noip图论整理.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

有一二三 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档