写的 Dinic 的板子,两份代码只有dfs里面有区别
然后第一份代码跑的很慢,#9达到了605ms
int dfs(int x,int flow)
{
if(x==t) {return flow;}
int ans=0;
for(int &i=cur[x];i&&ans!=flow;i=nx[i])
{
if(wg[i]&&dep[to[i]]==dep[x]+1)
{
int x=dfs(to[i],min(wg[i],flow-ans));
if(x) {wg[i]-=x;wg[i^1]+=x;ans+=x;}
}
}
if(ans<flow) {dep[x]=-1;}
return ans;
}
测评记录
而另一份却跑得飞快,#9只有15ms
int dfs(int x,int flow)
{
if(x==t) {return flow;}
int ans=0;
for(int &i=cur[x];i;i=nx[i])
{
if(wg[i]&&dep[to[i]]==dep[x]+1)
{
int x=dfs(to[i],min(wg[i],flow-ans));
if(x) {wg[i]-=x;wg[i^1]+=x;ans+=x;}
}
if(flow==ans) {break;}
}
if(ans<flow) {dep[x]=-1;}
return ans;
}
测评记录
请问是什么原因导致的呢?