zoukankan      html  css  js  c++  java
  • P2050 [NOI2012]美食节(费用流)

    因为数据较大,一次性把所有边都加完会T
    于是我们每次只连需要的边跑费用流
    就是开始先连所有厨师做倒数第1道菜
    跑费用流后会选一个厨师做菜,于是就把该厨师做第2道菜的情况加进去
    每跑一次都这样动态加边
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std;
    #define N 100005
    #define M 4000005
    int n,m,w[105],e[105][105],v,tot;
    int d[N],a[N],p[N],S,T,tC;
    queue <int> h; bool inh[N];
    int cnt=1,hd[N],nxt[M],ed[N],poi[M],val[M],cst[M];
    inline void adde(int x,int y,int v1,int v2){
        nxt[ed[x]]=++cnt, hd[x]=hd[x]?hd[x]:cnt,
        ed[x]=cnt, poi[cnt]=y, val[cnt]=v1, cst[cnt]=v2;
    }
    inline void link(int x,int y,int v1,int v2){adde(x,y,v1,v2),adde(y,x,0,-v2);}
    bool bfs(){
        memset(d,63,sizeof(d)); int inf=d[0];
        h.push(S); inh[S]=1; d[S]=0; a[S]=inf;
        while(!h.empty()){
            int x=h.front(); h.pop(); inh[x]=0;
            for(int i=hd[x];i;i=nxt[i]){
                int to=poi[i];
                if(val[i]>0&&d[to]>d[x]+cst[i]){
                    d[to]=d[x]+cst[i]; p[to]=i;
                    a[to]=min(a[x],val[i]);
                    if(!inh[to]) h.push(to),inh[to]=1;
                }
            }
        }if(d[T]==inf) return 0;
        tC+=a[T]*d[T]; int id=poi[p[T]^1]+m;//做菜的厨师一定是poi[p[T]^1]%m ,它一定是通过正向边到T
        for(int i=T;i!=S;i=poi[p[i]^1]) val[p[i]]-=a[T],val[p[i]^1]+=a[T];
        link(id,T,1,0);
        for(int i=1;i<=n;++i) link(tot*m+i,id,1,((id-1)/m+1)*e[i][(id-1)%m+1]);
        return 1;
    }
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;++i) scanf("%d",&w[i]),tot+=w[i];
        S=tot*m+n+10; T=S+1;
        for(int i=1;i<=n;++i) link(S,tot*m+i,w[i],0);
        for(int i=1;i<=m;++i) link(i,T,1,0);
        for(int i=1;i<=n;++i)
            for(int j=1;j<=m;++j)
                scanf("%d",&e[i][j]),link(tot*m+i,j,1,e[i][j]);
        while(bfs());
        printf("%d",tC);
        return 0;
    }
  • 相关阅读:
    javascript字符串加密解密函数
    javascript实现blob加密视频源地址
    HTML网页实现flv视频播放
    DELL r720远控装系统
    nginx笔记
    Centos7防火墙配置
    CentOS7.x搭建LNMP
    搭建可道云私人云盘系统
    网络设备巡检常用命令-摘自星球成员马磊分享
    部署Windows Server 2012的WSUS补丁服务器
  • 原文地址:https://www.cnblogs.com/kafuuchino/p/10799134.html
Copyright © 2011-2022 走看看