• P3376 网络最大流 【模板】


    ..突然发现自己拖了很久都没有学习有关网络流的东西了,所以先从模板开始写起吧.

    dinic

    code:

    #include<iostream>
    #include<cstring>
    #include<queue>
    #define INF 0x3f3f3f3f
    const int MAXN = 1e6+5;
    struct side{
        int from,to,next,w;
    }edge[MAXN];
    int head[MAXN],depth[MAXN],n,m,s,t,len=-1;
    using namespace std;
    void ins(int x,int y,int d)
    {
        //利用结构体的赋值
        edge[++len]=
        (side){x,y,head[x],d};
        head[x]=len;
    }
    int bfs()
    {
        queue<int>q;
        fill(depth,depth+1+n,0);
        depth[s]=1;q.push(s);
        while(q.size())
        {
            int now=q.front(); q.pop();
            for(int k=head[now];k!=-1;k=edge[k].next){
                //下一层未被访问
                if(edge[k].w>0&&depth[edge[k].to]==0){
                    depth[edge[k].to]=depth[now]+1;
                    q.push(edge[k].to);
                }
    
            }
    
        }
        //在未更新到汇点之前
        return depth[t]!=0;
    }
    int dfs(int now,int flow)
    {
        //汇点停止
        if(now==t) return flow;
        for(int k=head[now];k!=-1;k=edge[k].next)
            //流量大于0,切不是往回流
            if(edge[k].w>0&&depth[edge[k].to]==depth[now]+1)
            {
                int minflow=dfs(edge[k].to,min(flow,edge[k].w));
                if(minflow>0)
                {
                    edge[k].w-=minflow;
                    edge[k^1].w+=minflow;
                    return minflow;
                }
            }
        return 0;
    }
    int dinic(int ans=0)
    {
    //在bfs广搜下进行深搜
        while(bfs())
            while(int flow=dfs(s,INF)) ans+=flow;
        return ans;
    }
    int main()
    {
        cin>>n>>m>>s>>t;
        fill(head,head+1+n,-1);
        for(int x,y,d,i=1;i<=m;i++){
            cin>>x>>y>>d;
            ins(x,y,d);//正向建边
            ins(y,x,0);//反向建边
        }
    
        cout<<dinic();
    }
  • 相关阅读:
    装饰 Markdown
    小技巧
    LINUX 下挂载 exfat 格式 u 盘或移动硬盘
    Matlab 也很强大!
    imageio 载入 Buffer 格式的图片
    Docker 入门
    COCO 数据集使用说明书
    Python 基础 json 与pickle
    Python 基础 常用模块
    Python 基础 装饰器
  • 原文地址:https://www.cnblogs.com/Tianwell/p/11814056.html
Copyright © 2020-2023  润新知