建议增加数据强度

P3376 【模板】网络最大流

Flanksy @ 2023-06-29 22:31:07

模板题写过了,双倍经验 WA 了。

错误的写法:

long long dfs(int x,long long flow){
    if(x==T||!flow) return flow;
    long long ret=0ll;
    for(int &i=hc[x];i;i=e[i].nxt) if(d[e[i].to]==d[x]+1){
        long long now=dfs(e[i].to,min(flow,e[i].w));
        ret+=now,e[i].w-=now,e[i^1].w+=now;
        if(ret==flow) break;
    }
    return ret;
}

正确的写法:

long long dfs(int x,long long flow){
    if(x==T||!flow) return flow;
    long long ret=0ll;
    for(int &i=hc[x];i;i=e[i].nxt) if(d[e[i].to]==d[x]+1){
        long long now=dfs(e[i].to,min(flow,e[i].w));
        ret+=now,e[i].w-=now,e[i^1].w+=now;
        flow-=now;
        if(!flow) break;
    }
    return ret;
}

第一种写法的 dfs 中限制了流量但没有完全限制。建议把 P2740 的第 11 个测试点搬到本题作为 hack 数据。


by Aresword_2 @ 2023-09-20 19:10:18

改成这样应该也行:

long long now=dfs(e[i].to,min(flow-ret,e[i].w));

就是减去 ret


|