码迷,mamicode.com
首页 > 其他好文 > 详细

网络流之费用流问题

时间:2014-07-30 00:27:02      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   for   art   问题   

费用流即最小费用最大流

 

先贴上粉书上的模板:

bubuko.com,布布扣
struct Edge
{
    int from,to,cap,flow,cost;        
    Edge(int u,int v,int c,int f,int w):
        from(u),to(v),cap(c),flow(f),cost(w)
        {}
};

int n,m;
vector<Edge> edges;
vector<int> G[maxn];
int inq[maxn];
int d[maxn];
int p[maxn];
int a[maxn];


void init(int n)
{
    //this->n=n;    粉书上原版有这一句,但明显会报错。感觉去掉也没什么影响...
    for (int i=0;i<n;i++)
        G[i].clear();
    edges.clear();
}

void AddEdge(int from,int to,int cap,int cost)
{
    edges.push_back(Edge(from,to,cap,0,cost));
    edges.push_back(Edge(to,from,0,0,-cost));
    m=edges.size();
    G[from].push_back(m-2);
    G[to].push_back(m-1);
}

bool BellmanFord(int s,int t,int &flow,long long &cost)        //用队列优化过,感觉和SPFA一样了
{
    for (int i=0;i<n;i++)   d[i]=INF;
    memset(inq,0,sizeof(inq));
    d[s]=0;     inq[s]=1;       p[s]=0;     a[s]=INF;
    
    queue<int> Q;
    Q.push(s);
    while (!Q.empty())
    {
        int u=Q.front();
        Q.pop();
        inq[u]=0;
        for (int i=0;i<G[u].size;i++)
        {
            Edge& e=edges[G[u][i]];
            if (e.cap>e.flow && d[e.to]>d[u]+e.cost())
            {
                d[e.to]=d[u]+e.cost;
                p[e.to]=G[u][i];
                a[e.to]=min(a[u],e.cap-e.flow);
                if (!inq[e.to])     
                {
                    Q.push(e.to);
                    inq[e.to]=1;
                }
            }
        }
    }
    if (d[t]==INF)      return false;
    flow+=a[t];
    cost+=(long long)d[t] * (long long)a[t];
    for (int u=t;u!=s;u=edges[p[u]].from)
    {
        edges[p[u]].flow+=a[t];
        edges[p[u]^1].flow-=a[t];
    }
    return true;
}
    
int MCMF(int s,int t,long long& cost)        //s:起点;t:汇点;
{
    int flow=0;     cost=0;            //flow:求出来的最大流      cost:求出来的费用
    while (BellmanFord(s,t,flow,cost));
    return flow;
}
View Code

 

Exercise:POJ2516

 

网络流之费用流问题,布布扣,bubuko.com

网络流之费用流问题

标签:style   blog   http   color   os   for   art   问题   

原文地址:http://www.cnblogs.com/pdev/p/3876547.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!