ll dinic(ll x, ll flow){
if(x == t) return flow;
ll rest = flow, k, i;
for(i = now[x]; i && rest; i = nex[i]){
if(val[i] && d[to[i]] == d[x] + 1){
k = dinic(to[i], min(rest, val[i]));
if(k == 0) d[to[i]] = 0;
val[i] -= k;
val[i ^ 1] += k;
rest -= k;
if(rest == 0) break;
}
}
now[x] = i;
return flow - rest;
}
在循环开头的 i && rest 和上面那句的功能不是一样的么?
for(i = now[x]; i && rest; i = nex[i]){