社区讨论

关于 Dinic 的当前弧优化

学术版参与者 2已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mhizh8ug
此快照首次捕获于
2025/11/03 18:14
4 个月前
此快照最后确认于
2025/11/03 18:14
4 个月前
查看原帖
在一道题目中,我分别尝试了以下两种维护当前弧的方式:
  • 方式 1
CPP
for(int i=cur[u];i!=-1&&ans<flow;i=e[i].nxt)
{
    cur[u]=i;
    int v=e[i].v;
    if(e[i].cap>0&&dis[v]==dis[u]+1)
    {
        int x=dfs(v,t,min(flow-ans,e[i].cap));
        if(x>0) ans+=x,e[i].cap-=x,e[i^1].cap+=x;
    }
}
  • 方式 2
CPP
for(int &i=cur[u];i!=-1&&ans<flow;i=e[i].nxt)
  {
      //cur[u]=i;
      int v=e[i].v;
      if(e[i].cap>0&&dis[v]==dis[u]+1)
      {
          int x=dfs(v,t,min(flow-ans,e[i].cap));
          if(x>0) ans+=x,e[i].cap-=x,e[i^1].cap+=x;
      }
  }
代码的其他部分没有任何差异。
然而,方式 1 获得了 AC,方式 2 获得了 TLE。
有大佬能解释一下这两种写法有什么区别吗?

回复

6 条回复,欢迎继续交流。

正在加载回复...