poj 2135 最小費用流

來源:互聯網
上載者:User
#include<stdio.h>#include<string.h>#include<algorithm>#include<queue>using namespace std;#define SIZE 1010const int inf = 100000000;struct node{int s,t,f,w;int next;}edge[100010];int head[2010];int mincost,tot;int s,t,pre[2010];void add(int s,int t,int w,int f){edge[tot].f=f;edge[tot].w=w;edge[tot].t=t;edge[tot].s=s;edge[tot].next=head[s];head[s]=tot++;}void addedge(int s,int t,int w,int f){add(s,t,w,f);add(t,s,-w,0);}int n;bool spfa(){    bool vis[SIZE];    memset(vis,false,sizeof(vis));    int d[SIZE];    int i=n+2;    while(i--)d[i]= inf;    d[s]=0;    vis[s]=true;    queue<int >Q;    Q.push(s);    pre[s]=-1;    while(!Q.empty())    {        int u=Q.front();        Q.pop();        vis[u]=false;        for(int i=head[u];i!=-1;i=edge[i].next)        {            if(edge[i].f>0&&d[u]+edge[i].w<d[edge[i].t])            {                d[edge[i].t]=d[u]+edge[i].w;                pre[edge[i].t]=i;                if(!vis[edge[i].t])                {                    Q.push(edge[i].t);                    vis[edge[i].t]=true;                }            }        }    }    if(d[t]==inf)return false;    return true;}   void solve(){for(int i=pre[t];i!=-1;i=pre[edge[i].s]){edge[i].f-=1;edge[i^1].f+=1;mincost+=edge[i].w;}}int main(){int m,cases=1;    while(scanf("%d%d",&n,&m),(n||m)){s=0;t=n+1;tot=0;mincost=0;memset(head,-1,sizeof(head));for(int i=0;i<m;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);a++,b++;addedge(a,b,c,1);addedge(b,a,c,1);}addedge(s,1,0,2);addedge(n,t,0,2);while(spfa()){solve();}       printf("%d\n",mincost);}    return 0;}

 

從起點走到終點,再從終點走到起點,不能有重複的路徑

不能單純的求最短路徑兩遍,因為第一次選的點會影響第二次走最短路的選擇

因為每條邊只能選一次,所以給每條邊一個容量1,即只能流一次,費用為路徑的長度

然後利用最小費用流來求解

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.