写法 1
int DFS(int x, int flow) {
if(x == t) return flow;
for(int i = start[x] ; i ; i = e[i].next) {
int to = e[i].to;
if(!e[i].w || d[to] != d[x] + 1) continue;
int D = DFS(to, min(flow, e[i].w));
if(D != 0) {
e[i].w -= D, e[i ^ 1].w += D;
return D;
}
}
return 0;
}
写法 2 :
int DFS(int x, int flow) {
if(x == t || !flow) return flow;
int ans = 0;
for(int i = start[x] ; i ; i = e[i].next) {
int to = e[i].to;
if(!e[i].w || d[to] != d[x] + 1) continue;
int D = DFS(to, min(flow, e[i].w));
ans += D, flow -= D, e[i].w -= D, e[i ^ 1].w += D;
}
return ans;
}
第一种写法能过最大流的板子,但是过不掉 CQOI 2009 跳舞那题。第二种写法能过 CQOI 跳舞那道题,但是过不了板子。
两种写法的复杂度是否一样?是否与图的疏密程度有关呢?求大佬解答。