Uva-1486-Transportation
2014-07-12 08:33
183 查看
这个题关键在于拆边,把边拆为流量为1的边,这样就跑费用流就行了
代码:
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<queue> using namespace std; const int inf=1<<29; const int maxn=110; const int maxm=5e5; int n,m,k,st,des,e,head[maxn],nxt[maxm],flow[maxm],pnt[maxm],cost[maxm],dist[maxn],pre[maxn]; bool vis[maxn]; queue<int> q; void AddEdge(int u,int v,int c,int f) { pnt[e]=v;nxt[e]=head[u];cost[e]=c;flow[e]=f;head[u]=e++; pnt[e]=u;nxt[e]=head[v];cost[e]=-c;flow[e]=0;head[v]=e++; } bool Spfa() { for(int i=st;i<=des;i++) { dist[i]=inf; pre[i]=-1; } dist[st]=0; q.push(st); while(!q.empty()) { int u=q.front(); vis[u]=0; q.pop(); for(int i=head[u];i!=-1;i=nxt[i]) if(flow[i]&&dist[pnt[i]]>dist[u]+cost[i]) { pre[pnt[i]]=i; dist[pnt[i]]=dist[u]+cost[i]; if(!vis[pnt[i]]) { q.push(pnt[i]); vis[pnt[i]]=0; } } } return dist[des]!=inf; } int mincostflow() { int ans=0,sum=0; while(Spfa()) { int mini=inf; for(int i=pre[des];i!=-1;i=pre[pnt[i^1]]) mini=min(mini,flow[i]); for(int i=pre[des];i!=-1;i=pre[pnt[i^1]]) { flow[i]-=mini; flow[i^1]+=mini; } ans+=mini*dist[des]; sum+=mini; } return sum<k?-1:ans; } int main() { while(scanf("%d%d%d",&n,&m,&k)!=EOF) { memset(head,-1,sizeof(head)); e=0;st=0;des=n+1; for(int i=0;i<m;i++) { int u,v,a,c; scanf("%d%d%d%d",&u,&v,&a,&c); for(int j=1;j<=c;j++) AddEdge(u,v,j*j*a-(j-1)*(j-1)*a,1); } AddEdge(st,1,0,k); AddEdge(n,des,0,k); printf("%d\n",mincostflow()); } return 0; }
相关文章推荐
- uva 1486 - Transportation(最小费用流)
- UVA 1486 - Transportation(网络流+拆边)
- UVa1486 Transportation(最小费用最大流)
- (beginer) 网络流(最小费用流+费用跟流量有关) UVA 1486 - Transportation
- UVA-1486 - Transportation(最小费用最大流)
- uva 1486 Transportation (费用流+拆边)
- uva1486 Transportation
- UVa 301 - Transportation
- uva 301 - Transportation
- UVa 301 - Transportation
- ( 回溯 )uva 301 - Transportation
- [回溯]Transportation UVA301
- UVa 301 - Transportation
- UVA 301 Transportation
- POJ1040 HDU1456 UVA301 UVALive5516 Transportation
- UVA 301 Transportation
- UVA 301 - Transportation
- UVA - 301 Transportation
- UVa 301 Transportation
- uva 1486,费用流