生活随笔
收集整理的這篇文章主要介紹了
HDU 2282 Chocolate (最小费用最大流)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
HDU ?2282 Chocolate (最小費用最大流)
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstdlib>
using namespace std;const int maxn=30000;
const int inf=200000000;
struct edge{int u,v,next,f,c;edge(int u0=0,int v0=0,int f0=0,int c0=0,int next0=0){u=u0,v=v0,f=f0,c=c0,next=next0;}
}e[maxn*10];
int head[maxn*2],visited[maxn*2],path[maxn*2],dist[maxn*2];
int cnt,from,to,marked,maxflow,offflow,n,r,m;void initial(){to=2*n+1;cnt=0;marked=1;maxflow=0;from=0;for(int i=0;i<=to;i++){head[i]=-1;visited[i]=0;}
}void adde(int u,int v,int f,int c){e[cnt].u=u,e[cnt].v=v,e[cnt].f=f,e[cnt].c=c,e[cnt].next=head[u],head[u]=cnt++;e[cnt].u=v,e[cnt].v=u,e[cnt].f=0,e[cnt].c=-c,e[cnt].next=head[v],head[v]=cnt++;
}void input(){int u0,c0;for(int i=1;i<=n;i++){adde(0,i,inf,0);adde(i+n,to,1,0);}for(int i=1;i<=n;i++){scanf("%d",&c0);adde(i,i+n,c0,0);adde(i+n,i-1<1?n+n:i-1+n,inf,1);adde(i+n,i+1>n?1+n:i+1+n,inf,1);}
}void bfs(){for(int i=0;i<=to;i++){dist[i]=inf;path[i]=-1;}dist[0]=0;queue <int> q;q.push(0);marked++;visited[0]=marked;while(!q.empty()){int s=q.front();q.pop();for(int i=head[s];i!=-1;i=e[i].next){int d=e[i].v;if(e[i].f>0 && dist[s]+e[i].c<dist[d]){dist[d]=dist[s]+e[i].c;path[d]=i;if(visited[d]!=marked){visited[d]=marked;q.push(d);}}}visited[s]=-1;}
}void computing(){while(true){ bfs();/*cout<<to;for(int i=to;i!=from;i=e[path[i]].u){cout<<"->"<<e[path[i]].u;}cout<<endl;*/if(dist[to]>=inf) break;maxflow+=dist[to];for(int i=to;i!=from;i=e[path[i]].u){e[path[i]].f-=1;e[path[i]^1].f+=1;}}printf("%d\n",maxflow);
}int main(){while(scanf("%d",&n)!=EOF){initial();input();computing();}return 0;
}
轉(zhuǎn)載于:https://www.cnblogs.com/toyking/p/3797396.html
總結(jié)
以上是生活随笔為你收集整理的HDU 2282 Chocolate (最小费用最大流)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。