为什么这样
ll dinic(int x,ll In){
if(x == t)return In;
ll Bk = 0,res;
for(int i = st[x];i && In;i = Next[i]){
int y = ver[i];
if(edge[i] && d[y] == d[x] + 1){
res = dinic(y,min(In,edge[i]));
In -= res,Bk += res;
edge[i] -= res,edge[i ^ 1] += res;
}
st[x] = Next[i];//here
}
if(Bk == 0)
d[x] = 0;
return Bk;
}
如此之慢 提交记录
而这样
ll dinic(int x,ll In){
if(x == t)return In;
ll Bk = 0,res;
for(int i = st[x];i && In;i = Next[i]){
int y = ver[i];
if(edge[i] && d[y] == d[x] + 1){
res = dinic(y,min(In,edge[i]));
In -= res,Bk += res;
edge[i] -= res,edge[i ^ 1] += res;
}
if(!edge[i])st[x] = Next[i];//here
}
if(Bk == 0)
d[x] = 0;
return Bk;
}
却快了不少提交记录