Dinic 55分求助

P3376 【模板】网络最大流

冰糖鸽子 @ 2021-01-07 17:52:42

RT,WA 4,7,8,9,10


// Problem: P3376 【模板】网络最大流
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3376
// Memory Limit: 128 MB
// Time Limit: 2000 ms
// Powered by CP Editor (https://github.com/cpeditor/cpeditor)

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define M 205
bool vis[M];
int ans,h[M],hav[M],u,v,W,n,m,s,t,w[M][M];
vector<int>road[M];//first为v,second为w
queue<int>q;
bool R()//Bfs求联通否/每点深度
{
    int up,vp;
    q=queue<int>();
    memset(h,0,sizeof(h));
    q.push(s);h[s]=1;
    while(!q.empty())
    {
        up=q.front();q.pop();
        vis[up]=1;
        for(int i=0;i<road[up].size();i++)
        {
            vp=road[up][i];
            if(h[vp]||!w[up][vp]){continue;}
            h[vp]=h[up]+1;
            q.push(vp);
        }
    }
    return h[t]!=0;
}
int done(int now,int u)
{
    int res,sum=0;
    if(u==t){return now;}
    for(int i=0,v=road[u][0];i<road[u].size();i++,v=road[u][i])
    {
        if(h[v]-1!=h[u]||!w[u][v])
        {
            continue;
        }
        res=done(min(now,w[u][v]),v);
        w[u][v]-=res;
        w[v][u]+=res;
        sum+=res;
        if(sum==now){break;}
    }
    return sum;
}
void Ef()
{
    while(R()){memset(vis,0,sizeof(vis));vis[s]=1;ans+=done(2009062700,s);}
    cout<<ans;
}
signed main()
{
    cin>>n>>m>>s>>t;
    for(int i=1;i<=m;i++)
    {
        cin>>u>>v>>W;
        road[u].push_back(v);w[u][v]=W;
        road[v].push_back(u);w[v][u]=0;
    }
    Ef();
    return 0;
}
/*
1 3 40
2 1 30
2 3 20
4 3 20
4 2 30
(图请看题面)
咱们走g
*/

/*
2+2+3
*/

by 幻影星坚强 @ 2021-01-07 17:59:00

他可没说不包括重边自环


by 幻影星坚强 @ 2021-01-07 17:59:09

@冰糖鸽子


by 冰糖鸽子 @ 2021-01-07 18:00:46

谢谢!


by 冰糖鸽子 @ 2021-01-07 18:14:34

加当前弧还是TLE 9/yiw


by zimujun @ 2021-01-07 18:34:06

@冰糖鸽子 如果某个点返回的流量为 0 就把那个点封锁掉,请


by zimujun @ 2021-01-07 18:35:02

@zimujunqwq

即在 dfs 里加上:

if(!res) h[v] = -1; 

by zimujun @ 2021-01-07 19:00:41

@冰糖鸽子 这里应该这么写

res=done(min(now - sum,w[u][v]),v);

原因:每枚举完一条出边之后,这个点的剩余流量都会减少


by 血色黄昏 @ 2021-01-07 19:03:29

@冰糖鸽子 dinic貌似不需要加当前弧就能轻松过此题,反正我的跑的很轻松(


by zimujun @ 2021-01-07 19:05:09

@冰糖鸽子

模板题就不要下载数据点输出了吧(((


by SIXIANG32 @ 2021-01-08 20:41:06

Orz dmr 会网络流 stO


|