zoukankan      html  css  js  c++  java
  • 网络流(小常数)

    #include<bits/stdc++.h>
    using namespace std;
    const int inf=1000000007;
    struct edg{int y,nxt,v;}e[41000];  
    int lk[210],ltp=1;
    int n,m,o,a[210];  
    int s,t;
    int lvl[210];
    int q[210],hd=0;
    int crt[210];
    void addE(int x,int y,int v){
        e[++ltp]=(edg){y,lk[x],v};  lk[x]=ltp;
        e[++ltp]=(edg){x,lk[y],0};  lk[y]=ltp;
    }
    int rd(){int z=0,mk=1;  char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')mk=-1;  ch=getchar();}
        while(ch>='0'&&ch<='9'){z=(z<<3)+(z<<1)+ch-'0';  ch=getchar();}
        return z*mk;
    }
    bool bfs(){
        for(int i=s;i<=t;++i)  lvl[i]=0;
        lvl[(q[(hd=1)]=s)]=1;
        for(int k=1;k<=hd;++k){
            crt[q[k]]=lk[q[k]];
            for(int i=lk[q[k]];i;i=e[i].nxt)if(e[i].v && !lvl[e[i].y]){
                lvl[e[i].y]=lvl[q[k]]+1;
                q[++hd]=e[i].y;
            }
        }
        return lvl[t];
    }
    int dfs(int x,int y){
        if(x==t)  return y;
        int bwl=0,flw=0;
        for(int i=crt[x];i && bwl<y;i=e[i].nxt)if(lvl[e[i].y]==lvl[x]+1 && e[i].v)
            if((flw=dfs(e[i].y,min(e[i].v,y-bwl)))){
                e[i].v-=flw,e[i^1].v+=flw;
                bwl+=flw;
                if(!e[i].v)  crt[x]=e[i].nxt;
            }
        if(!bwl)  lvl[x]=0;
        return bwl;
    }
    int dinic(){
        int bwl=0,flw=0;
        while(bfs())while((flw=dfs(s,inf))){
            bwl+=flw;
        }
        return bwl;
    }
    void solve(){
        int ans=0;
        s=0;
        t=n+m+1;
        for(int i=s;i<=t;i++){
            lk[i]=0;
        }
        ltp=1;
        for(int i=1;i<=n;i++){
            a[i]=rd();
            addE(s,i,a[i]);
            ans+=a[i];
        }
        for(int i=1;i<=m;i++){
            a[i+n]=rd();
            ans+=a[i+n];
            addE(i+n,t,a[i+n]);
        }
        int qs=rd();
        while(qs--){
            int u,v;
            u=rd();
            v=rd();
            addE(u,v,inf);
        }
        ans-=dinic();
        printf("%d
    ",ans);
        return ;
    }
    int main(){
    //    ios::sync_with_stdio(false);cin.tie(0);
        while(scanf("%d%d",&n,&m)!=EOF){
            solve();
        }
        return 0;
    }
    rush!
  • 相关阅读:
    Codeforces 1316B String Modification
    Codeforces 1305C Kuroni and Impossible Calculation
    Codeforces 1305B Kuroni and Simple Strings
    Codeforces 1321D Navigation System
    Codeforces 1321C Remove Adjacent
    Codeforces 1321B Journey Planning
    Operating systems Chapter 6
    Operating systems Chapter 5
    Abandoned country HDU
    Computer HDU
  • 原文地址:https://www.cnblogs.com/LH2000/p/15230719.html
Copyright © 2011-2022 走看看