社区讨论
关于 Dinic 的当前弧优化
学术版参与者 2已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @mhizh8ug
- 此快照首次捕获于
- 2025/11/03 18:14 4 个月前
- 此快照最后确认于
- 2025/11/03 18:14 4 个月前
在一道题目中,我分别尝试了以下两种维护当前弧的方式:
- 方式 1
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
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 条回复,欢迎继续交流。
正在加载回复...