关于 Dinic 的DFS的两种写法
  • 板块学术版
  • 楼主MuYC
  • 当前回复15
  • 已保存回复15
  • 发布时间2021/6/10 09:21
  • 上次更新2023/11/4 22:04:36
查看原帖
关于 Dinic 的DFS的两种写法
67817
MuYC楼主2021/6/10 09:21

写法 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 跳舞那道题,但是过不了板子。

两种写法的复杂度是否一样?是否与图的疏密程度有关呢?求大佬解答。

2021/6/10 09:21
加载中...