设为首页 收藏本站
查看: 604|回复: 0

[经验分享] 最大流SAP算法的当前弧优化

[复制链接]

尚未签到

发表于 2015-9-19 14:19:20 | 显示全部楼层 |阅读模式
  找了很多资料和程序,大多是编程风格和语言实在和我的不相符和。终于搞得有点明白了。因为找的时候会有很多不可行的弧,在距离标号修改之前还是不可行的,那么我们引入cur数组,标志可行的第一条弧,每次如果修改了距离标号的话就修改它。据这位说:"早就听说当前弧优化,但是一加到自己代码上就错。这次终于找到原因了,因为以前把更新距离标号的一部分操作挪到寻找可行弧时完成,但这样一来就会出现问题。把操作独立出来之后问题就解决了。"并且另外一位大牛的程序似乎也是这样的。于是懒惰的我就没有继续思考了,就把这个思路整合到自己的代码里,提交了一道裸的最大流,AC了,程序应该没问题吧。
  参考:
  http://baike.dangzhi.com/wiki/SAP#SAP.E7.AE.97.E6.B3.95
  http://hi.baidu.com/lemon_workshop/blog/item/ab28ecbc71717d0718d81f15.html
  http://dementrock.ixiezi.com/2010/07/28/noi-2006-%E6%9C%80%E5%A4%A7%E8%8E%B7%E5%88%A9/
  
  
  我想应该很少有题目能卡SAP+GAP+CUR的程序了吧……
  附:我的RQNOJ194程序
const
oo=19930508;
var
c:array[0..1000,0..1000] of longint;
h,vh,cur:Array[0..1000] of longint;
maxflow,n,m,i,j,k,x,y,z:longint;

function aug(i,now:longint):longint;
var
k,minh,tmp,j:longint;
begin
aug:=0;
minh:=n-1;
if i=n then
begin
inc(maxflow,now);
exit(now);
end;
for j:=1 to n do
if c[i,j]>0 then
begin
if h[j]=h-1 then
begin
if c[i,j]>now then
tmp:=aug(j,now)
else tmp:=aug(j,c[i,j]);
dec(c[i,j],tmp);
inc(c[j,i],tmp);
dec(now,tmp);
inc(aug,tmp);
if h[1]>=n then exit;
if now=0 then break;
end;
end;
if aug=0 then
begin
for j:=1 to n do
if (c[i,j]>0) and (h[j]<minh) then
begin
minh:=h[j];
k:=j;
end;
cur:=k;//cur优化
dec(vh[h]);
if vh[h]<=0 then h[1]:=n;
h:=minh+1;
inc(vh[h]);
end;
end;
procedure sap;
begin
fillchar(vh,sizeof(vh),0);
fillchar(h,sizeof(h),0);
vh[0]:=n;
for i:=1 to n do
cur:=1;//初始化当前弧
while h[1]<n do
aug(1,oo);
end;
begin
readln(m,n);
for i:=1 to m do
begin
readln(x,y,z);
c[x,y]:=z;
end;
sap;
writeln(maxflow);
end.

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-115907-1-1.html 上篇帖子: 导出SAP系统表结构及数据供HANA使用 下篇帖子: 做SAP开发必看的几个问题(转自www.sapjob.cn)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表