费用流

来源:互联网 发布:python 数据挖掘 编辑:程序博客网 时间:2024/04/20 10:51
//HDU 1533int dis[N],vis[N];int path[N],low[N];queue<int > qq;int spfa(int s,int t){    memset(vis,0,sizeof(vis));    memset(dis,0x3f,sizeof(dis));    memset(low,0,sizeof(low));    qq.push(s);    vis[s]=1;dis[s]=0;low[s]=INF;    while(!qq.empty()){        int u=qq.front();qq.pop();        vis[u]=0;        for(int i=head[u];i!=-1;i=e[i].next){            int v=e[i].v;            if(e[i].cap>0&&(dis[v]>dis[u]+e[i].cost)){                path[v]=i;                low[v]=min(low[u],e[i].cap);                dis[v]=dis[u]+e[i].cost;                if(!vis[v]){                    vis[v]=1;                    qq.push(v);                }            }        }    }    return low[t];}int mcmf(int s,int t){    int flow=0;    int cost=0;    while(spfa(s,t)){        int f=low[t];        for(int i=t;i!=s;i=e[path[i]].u){            e[path[i]].cap-=f;            e[path[i]^1].cap+=f;        }        flow+=f;        cost+=dis[t]*f;    }    return cost;}

0 0