HDU 3667 Transportation (最小费用最大流)
来源:互联网 发布:人工智能电影图片 编辑:程序博客网 时间:2024/06/05 10:02
注意:
拆边的方法:
由于题目中说了要花费
那么如何控制费用呢?
按照题目要求我们的费用得是这样的(我省略了系数a):
1 4 9 16 25
所以将一条容量(c)为5的边拆成:
1 3 5 7 9
加起来满足题意,就算只走起中的几条也是满足的。
然后就是上模板了。
#include<iostream>#include<cstdio>#include<queue>#include<cstring>#include<map>#define inf 0x3f3f3f3ftypedef long long int lli;using namespace std;const lli maxn = 40000;struct edge{ int to,v,next,c;}ed[500000];int cnte,head[maxn],pre[maxn];//ans是最小费用int dis[maxn],ans;bool visq[maxn];inline void ae(int x,int y,int v,int c) { ed[cnte].to = y; ed[cnte].v = v; ed[cnte].c = c; ed[cnte].next = head[x]; head[x] = cnte++; ed[cnte].to = x; ed[cnte].v = 0; ed[cnte].c = -c; ed[cnte].next = head[y]; head[y] = cnte++;}bool spfa(int s,int t){ memset(dis,0x3f,sizeof(dis)); memset(visq,0,sizeof(visq)); memset(pre,-1,sizeof(pre)); int u;queue<int> q; q.push(s),dis[s]=0;visq[s] = true; while(!q.empty()){ u=q.front(),q.pop(); visq[u]=false; for(int i=head[u];~i;i=ed[i].next){ int v=ed[i].to; if(ed[i].v && dis[v] > dis[u]+ed[i].c){ dis[v] = dis[u]+ed[i].c; pre[v] = i; if(!visq[v]){ q.push(v); visq[v] = true; } } } } if(pre[t] == -1) return false; return true;}int n,m,k;int mcmf(int s,int t){//返回的是最大流量 int res = 0; while(spfa(s,t) && res < k){//注意流量别走多了 int f = 0x3f3f3f3f; for(lli i = pre[t];~i;i = pre[ed[i^1].to]){ f = min(f,ed[i].v); } for(lli i = pre[t];~i;i = pre[ed[i^1].to]){ ed[i].v -= f;ed[i^1].v += f; } ans += dis[t]; res += f; } return res;}void ini(){ memset(head,-1,sizeof(head));cnte = ans = 0;}int cnt[20] = {0,1,3,5,7,9};int main(){ while(~scanf("%d%d%d",&n,&m,&k)){ ini(); int u,v,a,c; int s = 1,t = n; for(int i = 1;i <= m;i++){ scanf("%d%d%d%d",&u,&v,&a,&c); for(int j = 1;j <= c;j++){ ae(u,v,1,a*cnt[j]); } } if(mcmf(s,t) != k) ans = -1; printf("%d\n",ans); } return 0;}
阅读全文
0 0
- HDU 3667 Transportation (最小费用最大流)
- HDU 3667 Transportation(最小费用最大流)
- HDU 3667 Transportation(最小费用最大流)
- HDU 3667Transportation(最小费用最大流)拆边,经典
- HDU -- 3667 Transportation(最小费用最大流 )
- HDU 3667 Transportation (最小费用最大流)
- HDU 3667 Transportation (最小费用最大流)
- hdu 3667 Transportation(最小费用最大流 拆边)
- Transportation (hdu 3667 最小费用最大流+拆边)
- HDU 3667 Transportation(建边技巧+最小费用最大流)
- hdu 3667 Transportation【最小费用流+拆边】
- hdu 3667 Transportation(最小费用流+拆边)
- HDU 3667 —— Transportation(最小费用流,拆边)
- Hdu 3667 Transportation(最小费用流+思路)
- hdoj 3667 Transportation 【拆边 + 最小费用最大流】
- HDOJ 3667 Transportation 最小费用最大流+拆边+加点
- HDU 3667 Transportation 费用流(拆边)
- HDU 3667 Transportation | 费用流(拆边)
- 初步学习struts
- webservice第二篇【自定义webservice服务、soa、uddi概念、soap协议】
- Svn linux服务端安装及配置
- 喷水装置(一)
- python3.6安装matplotlib、numpy时报错ImportError
- HDU 3667 Transportation (最小费用最大流)
- H
- 1008. Elevator (20)
- VScode编辑器 ~常用快捷键
- 三分法模板
- 嵌入式开发IO基础
- 2017阿里巴巴内推面经—测试开发岗
- Unity3D异步加载
- java访问Hbase