• 网络流(小常数)


    #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!
  • 相关阅读:
    json基础
    css语法以及css选择器
    HTML语义化标签
    CSS插入的四种方式
    Hibernate主键生成策略及选择
    HIbernate处理数据更新丢失
    数据库的四大特性以及事务的隔离级别
    MD5加密
    redis主从复制
    redis的持久化方案
  • 原文地址:https://www.cnblogs.com/LH2000/p/15230719.html
Copyright © 2020-2023  润新知