• codevs 1993 草地排水 USACO


    /*Dinic*/
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #define maxn 210
    #define inf 0x7fffffff
    using namespace std;
    int n,m,num,head[maxn],cur[maxn],dis[maxn];
    struct node{
        int u,v,flow,pre;
    }e[maxn*2];
    void Add(int from,int to,int t){
        e[num].u=from;
        e[num].v=to;
        e[num].flow=t;
        e[num].pre=head[from];
        head[from]=num++;
    }
    void Init(){
        scanf("%d%d",&m,&n);
        int u,v,t;
        memset(head,-1,sizeof(head));
        for(int i=1;i<=m;i++){
            scanf("%d%d%d",&u,&v,&t);
            Add(u,v,t);Add(v,u,0);
        }
    }
    bool Bfs(){
        memset(dis,-1,sizeof(dis));
        queue<int>q;
        q.push(1);dis[1]=0;
        while(!q.empty()){
            int k=q.front();q.pop();
            for(int i=head[k];i!=-1;i=e[i].pre){
                int v=e[i].v;
                if(dis[v]!=-1||!e[i].flow)continue;
                q.push(v);dis[v]=dis[k]+1;;
            }
        }
        return dis[n]!=-1;
    }
    int Dfs(int now,int lim){
        if(!lim||now==n)return lim;
        int r=0;
        for(int &i=cur[now];i!=-1;i=e[i].pre){
            int v=e[i].v,s=0;
            if(dis[v]==dis[now]+1&&(s=Dfs(v,min(lim,e[i].flow)))){
                e[i].flow-=s;r+=s;
                e[i^1].flow+=s;lim-=s;
            }
            if(lim==0)break;
        }
        return r;
    }
    void Dinic(){
        int ans=0;
        while(Bfs()){
            memcpy(cur,head,sizeof(head));
            ans+=Dfs(1,0x7fffffff);
        }
        printf("%d
    ",ans);
    }
    int main()
    {
        Init();
        Dinic();
        return 0;
    }
  • 相关阅读:
    行转列问题
    Session对象失效的客户端解决方法
    Spring之依赖注入
    Spring开发入门
    非关系型数据库redis
    Json(JavaScript Object Notation)
    Ajax
    JavaScript框架之JQuery
    Web核心之Filter过滤器
    Web核心练习之分页模块和条件模块(后台代码为主,jsp已经落伍)
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5865136.html
Copyright © 2020-2023  润新知