zoukankan      html  css  js  c++  java
  • luogo_3376 网络最大流

    #include<bits/stdc++.h>
    using namespace std;
    #define MAXN 100010
    #define INF 100000000
    struct Edge{int from,to,cap,flow;};
    vector<Edge> edges;
    vector<int> G[MAXN];
    int n,m,s,t,cur[MAXN],d[MAXN],u,v,w;
    bool vis[MAXN];
    void addedge(int from,int to,int cap){
    edges.push_back((Edge){from,to,cap,0});
    edges.push_back((Edge){to,from,0,0});
    int x=edges.size();
    G[from].push_back(x-2);
    G[to].push_back(x-1);
    }
    bool bfs(){
    memset(vis,0,sizeof(vis));
    queue<int> Q;
    Q.push(s); vis[s]=1; d[s]=0;
    while(!Q.empty()){
    int x=Q.front(); Q.pop();
    for(int i=0;i<G[x].size();i++){
    Edge& e=edges[G[x][i]];
    if(!vis[e.to] && e.cap>e.flow){
    vis[e.to]=1;
    d[e.to]=d[x]+1;
    Q.push(e.to);
    }
    }
    }
    return vis[t];
    }
    int dfs(int x,int a){
    if(x==t || a==0)return a;
    int flow=0,f;
    for(int& i=cur[x];i<G[x].size();i++){
    Edge& e=edges[G[x][i]];
    if(d[e.to]==d[x]+1 && (f=dfs(e.to,min(a,e.cap-e.flow)))>0){
    e.flow+=f;
    edges[G[x][i]^1].flow-=f;
    flow+=f;
    a-=f;
    if(a==0)break;
    }
    }
    return flow;
    }
    int Dinic(){
    int flow=0;
    while(bfs()){
    memset(cur,0,sizeof(cur));
    flow+=dfs(s,INF);
    }
    return flow;
    }
    int main(){
    scanf("%d%d%d%d",&n,&m,&s,&t);
    for(int i=1;i<=m;i++){
    scanf("%d%d%d",&u,&v,&w);
    addedge(u,v,w);
    }
    cout<<Dinic()<<endl;
    return 0;
    }
  • 相关阅读:
    10-vue自定义指令
    09-vue过滤器的基本使用
    vue总结
    07-vue的v-if和v-show
    06-循环数组v-for
    Java通过JNA调用dll或so
    Centos7安装FRP内网穿透工具进行远程连接
    centos7检查Java项目存活与否并重启
    centos7中Java项目重启
    Ubuntu 19.04: Connect to GNOME desktop environment via XRDP
  • 原文地址:https://www.cnblogs.com/codetogether/p/7498053.html
Copyright © 2011-2022 走看看