
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、SAP 算法关于网络流的定义之类可以到 nocow 寻找,这里不在阐述。SAP 算法(by dd_engi):求最大流有一种经典的算法,就是每次找增广路时用 BFS 找,保证找到的增广路是弧数最少的,也就是所谓的 Edmonds-Karp 算法。可以证明的是在使用最短路增广时增广过程不超过 V*E 次,每次 BFS 的时间都是 O(E),所以 Edmonds-Karp 的时间复杂度就是 O(V*E2)。如果能让每次寻找增广路时的时间复杂度降下来,那么就能提高算法效率了,使用距离标号的最短增广路算法就是这样的。所谓距离标号,就是某个点到汇点的最少的弧的数量(另外一种距离标号是从源点到该点的最少的
2、弧的数量,本质上没什么区别)。设点 i 的标号为 Di,那么如果将满足 Di=Dj+1 的弧(i,j)叫做允许弧,且增广时只走允许弧,那么就可以达到“怎么走都是最短路”的效果。每个点的初始标号可以在一开始用一次从汇点沿所有反向边的 BFS 求出,实践中可以初始设全部点的距离标号为 0,问题就是如何在增广过程中这个距离标号。距离标号的方法是这样的:当找增广路过程中发现某点出发没有允许弧时,将这个点的距离标号设为由它出发的所有弧的终点的距离标号的最小值加一。这种距离标号的方法的正确性我就不证了。由于距离标号的存在,由于“怎么走都是最短路”,所以就可以采用 DFS 找增广路,用一个栈保存当前路径的弧
3、即可。当某个点的距离标号被改变时,栈中指向它的那条弧肯定已经不是允许弧了,所以就让它出栈,并继续用栈顶的弧的端点增广。为了使每次找增广路的时间变成均摊O(V),还有一个重要的优化是对于每个点保存“当前弧”:初始时当前弧是邻接表的第一条弧;在邻接表中查找时从当前弧开始查找,找到了一条允许弧,就把这条弧设为当前弧;改变距离标号时,把当前弧重新设为邻接表的第一条弧,还有一种在常数上有所优化的写法是改变距离标号时把当前弧设为那条提供了最小标号的弧。当前弧的写法之所以正确就在于任何时候允许弧。都能保证在邻接表中当前弧的前面肯定不存在还有一个常数优化是在每次找到路径并增广完毕之后不要将路径中所有的顶点退栈
4、,而是只将瓶颈边以及之后的边退栈,这是借鉴了 Dinic 算法的。注意任何时候待增广的“当前点”都应该是栈顶的点的终点。这的确只是一个常数优化,由于当前边结构的存在,定可以在 O(n)的时间内复原路径中瓶颈边之前的所有边。肯代码:varflag:;jl,min,flow,aug,j,m,n,tmp,a,b,c,i:long;his,pre,dis,vh,di:array0.1024 of long; map:array1.1024,1.1024 of long;beginassign(input,ditch.in);reset(input); assign(output,ditch.out);
5、rewrite(output); readln(m,n);for i:=1 to m dobeginreadln(a,b,c);inc(mapa,b,c); end;vh0:=n;for i:=1 to n do dii:=1;当前弧初始为第一条弧 i:=1;从 S 开始搜aug:=maxlong; while dis10)and(disj+1=disi) then找到允许弧 beginflag:=true;dii:=j;标记当前弧if mapi,jaug then aug:=mapi,j; prej:=i;前驱i:=j;ifhen找到增广路 begininc(flow,aug); while
6、 i1 dobegin tmp:=i; i:=prei;dec(mapi,tmp,aug);inc(maptmp,i,aug); end;aug:=maxlong; end;break;找到允许弧则退出查找end; end;if flag then continue;找到允许弧 min:=n-1;没有允许弧了,需要重标号 for j:=1 to n dobeginif (mapi,j0)and(disjmin) then begin jl:=j;min:=disj;end; end;dii:=jl; dec(vhdisi);GAP 优化if vhdisi=0 then break;disi:=
7、min+1; inc(vhdisi);if i1 then begin i:=prei;返回上一层aug:=hisi;知道之前吧end;end; write(flow);close(input);close(output); end.这个值的用处了优化:1.邻接表优化:如果顶点多的话,往往 N2 存不下,这时候就要存边:存每条边的出发点,终止点和价值,然后排序一下,再每个出发点的位置。以后要调用从出发点出发的边时候,只需要从的位置开始找即可(其实可以用链表)。优点是时间加快空间节省,缺点是编程复杂度将变大,所以在题目允许的情况下,建议使用邻接矩阵。2.GAP 优化:如果一次重标号时,出现距离断层,则可以证明 ST 无可行流,此时则可以直接退出算法。3.当前弧优化:为了使每次找增广路的时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 货代企业业务流程重组与优化考核试卷
- 健身器材制造业消费者行为研究与产品设计创新实践考核试卷
- 药品储存与仓储环境控制考核试卷
- 礼仪用品企业社会责任实践考核试卷
- 窗帘面料的智能传感技术考核试卷
- 轮胎行业科技创新与产业升级考核试卷
- 肺炎医学科普知识讲座
- 生物制药产品包装技术秘密保护及品牌推广合作协议
- 网络直播平台内容审查与隐私保护合同
- 智能停车场车位预约系统用户培训与售后服务合同
- 电大《管理英语3》1-8单元试题附答案
- 带状疱疹性脑膜脑炎的治疗及护理
- 2023年扩散膜行业市场需求分析报告及未来五至十年行业预测报告
- 老年患者预防烫伤
- 2024年江苏绿色东海投资发展集团有限公司招聘笔试参考题库附带答案详解
- GB/T 43564-2023中小学合成材料面层田径场地
- 知行合一:王阳明传
- 广告宣传栏及雕塑采购项目服务投标方案(技术标)
- 国开《Windows网络操作系统管理》形考任务4-配置故障转移群集服务实训
- 波浪理论基础图解
- 角的度量说课PPT
评论
0/150
提交评论