HDU 3667
http://acm.hdu.edu.cn/showproblem.php?pid=3667
最小费用最大流
本题流量和费用不是线性关系,fee=a*flow*flow,所以常规套模板spfa无法得到最小费用
观察到每条边流量上限只有5,则可以把一条流量为f的边拆成f条流量为1的边,每条边费用是a*(2*i-1)(1<=i<=f)
- #include <iostream>
- #include <cstring>
- #include <cstdio>
- #include <queue>
- using namespace std ;
- const int INF=0xfffffff ;
- struct node{
- int s,t,cap,cost,nxt ;
- }e[] ;
- int sumflow ;
- int n,m,k,cnt,head[],vis[],dis[],pre[] ;
- void add(int s,int t,int cap,int cost)
- {
- e[cnt].s=s ;e[cnt].t=t ;e[cnt].cap=cap ;e[cnt].cost=cost ;e[cnt].nxt=head[s] ;head[s]=cnt++ ;
- e[cnt].s=t ;e[cnt].t=s ;e[cnt].cap= ;e[cnt].cost=-cost ;e[cnt].nxt=head[t] ;head[t]=cnt++ ;
- }
- int spfa(int s,int t,int N)
- {
- for(int i= ;i<=N ;i++)
- dis[i]=INF ;
- dis[s]= ;
- memset(vis,,sizeof(vis)) ;
- memset(pre,-,sizeof(pre)) ;
- vis[s]= ;
- queue <int> q ;
- q.push(s) ;
- while(!q.empty())
- {
- int u=q.front() ;
- q.pop() ;
- vis[u]= ;
- for(int i=head[u] ;i!=- ;i=e[i].nxt)
- {
- int tt=e[i].t ;
- if(e[i].cap && dis[tt]>dis[u]+e[i].cost)
- {
- dis[tt]=dis[u]+e[i].cost ;
- pre[tt]=i ;
- if(!vis[tt])
- {
- vis[tt]= ;
- q.push(tt) ;
- }
- }
- }
- }
- if(dis[t]==INF)return ;
- return ;
- }
- int MCMF(int s,int t,int N)
- {
- int flow,minflow,mincost ;
- mincost=flow= ;
- while(spfa(s,t,N))
- {
- minflow=INF ;
- for(int i=pre[t] ;i!=- ;i=pre[e[i].s])
- minflow=min(minflow,e[i].cap) ;
- flow+=minflow ;
- for(int i=pre[t] ;i!=- ;i=pre[e[i].s])
- {
- e[i].cap-=minflow ;
- e[i^].cap+=minflow ;
- }
- mincost+=dis[t]*minflow ;
- }
- sumflow=flow ;//最大流
- if(sumflow<k)return - ;
- return mincost ;
- }
- int main()
- {
- while(~scanf("%d%d%d",&n,&m,&k))
- {
- cnt= ;
- memset(head,-,sizeof(head)) ;
- while(m--)
- {
- int u,v,a,c ;
- scanf("%d%d%d%d",&u,&v,&a,&c) ;
- for(int i= ;i<=c ;i++)
- add(u,v,,a*(*i-)) ;//Σa*(2*i-1)=a*c*c
- }
- add(,,k,) ;
- printf("%d\n",MCMF(,n,n+)) ;
- }
- return ;
- }
HDU 3667的更多相关文章
- HDU 3667 Transportation(网络流之费用流)
题目地址:HDU 3667 这题的建图真是巧妙...为了保证流量正好达到k.须要让每一次增广到的流量都是1,这就须要把每一条边的流量都是1才行.可是每条边的流量并非1,该怎么办呢.这个时候能够拆边,反 ...
- HDU 3667.Transportation 最小费用流
Transportation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 3667(拆边+最小费用最大流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3667 思路:由于花费的计算方法是a*x*x,因此必须拆边,使得最小费用流模板可用,即变成a*x的形式. ...
- hdu 3667 拆边加最小费用流
Transportation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 3667 费用流(拆边)
题意:有n个城市(1~n),m条有向边:有k件货物要从1运到n,每条边最多能运c件货物,每条边有一个危险系数ai,经过这条路的费用需要ai*x2(x为货物的数量),问所有货物安全到达的费用. 思路:c ...
- hdu 3667(最小费用最大流+拆边)
Transportation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 3667 (拆边 mcmf)
注意题目中 边的容量 <= 5.可以把费用权值 a *f ^2化归成 a * f2, 即第一条边费用为 1 * a, 第二条 为 (4 - 1) * a, 第三条为 (9 - 4) * a.. ...
- hdu 3667 /2010哈尔滨赛区H题 费用与流量为非线性关系/费用流
题意: 在一般费用流题目改动:路过某路,每x单位流量须要花费 ai*x^2(ai为给定的系数). 開始的的时候,一看仅仅只是是最后统计费用上在改动罢了,一看例子.发现根本没那么简单(ps:以后每次写程 ...
- HDU 3667 费用流 拆边 Transportation
题意: 有N个城市,M条有向道路,要从1号城市运送K个货物到N号城市. 每条有向道路<u, v>运送费用和运送量的平方成正比,系数为ai 而且每条路最多运送Ci个货物,求最小费用. 分析: ...
随机推荐
- maven解决“Could not calculate build plan”问题
错误提示如下:(eclipse+maven) Could not calculate build plan: Failure to transfer org.apache.maven.plugins: ...
- POJ1006——Biorhythms(中国剩余定理)
Biorhythms Description人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色. ...
- visual studio多工程开发配置
文章:带你玩转Visual Studio——带你多工程开发 带你玩转Visual Studio——带你理解微软的预编译头技术 通过上一篇文章带你玩转Visual Studio——带你多工程开发的讲解, ...
- 文字和图片居中的HTML代码怎么写?
HTML 代码 ,怎么将文本/ 图片居中?这是在W3Cschool的编程问答中前端♌蕾儿提出的问题.网友施主同西否给出了详细的解答. html文字居中和html图片居中方法代码,通过在html中实现文 ...
- Cooperation.GTST团队项目总结
Cooperation.GTST团队项目总结 项目实现情况 目前对于基本UI界面的设计已经实现,对博客园接口XML的解析也已经完成,但是还暂时无法动态获取对应数据. 几张静态预览图展示(侧滑栏设计加入 ...
- ubuntu16.04安装tensorflow官方教程与机器学习资料【学习笔记】
tensorflow官网有官方的安装教程:https://www.tensorflow.org/install/install_linux google的机器学习官方快速入门教程:https://de ...
- ThinkPHP开发博客系统笔记之一
1.前后台搭建 开发的第一步是搭建前后台系统.搭建前台系统的时候新建了LoginController控制器和登录界面View/Login/index.tpl.模板文件中需要引入js和css文件,这里想 ...
- HDU 6354 Everything Has Changed(余弦定理)多校题解
题意:源点处有个圆,然后给你m个圆(保证互不相交.内含),如果源点圆和这些原相交了,就剪掉相交的部分,问你最后周长(最外面那部分的长度). 思路:分类讨论,只有内切和相交会变化周长,然后乱搞就行了.题 ...
- HDU 1438 钥匙计数之一(状压DP)题解
思路: 每个槽有4种深度,一共有2^4种状态.然后开4维来保存每一次的状态:dp[ 第几个槽 ][ 当前状态 ][ 末尾深度 ][ 是否符合要求 ]. 代码: #include<cstdio&g ...
- AJAX,JSON,GSON
AJAX将数据使用JSON格式发送给后端Servlet或其他语言解析. 对JSON内容使用GSON外扩展包进行分解,并使用(如查询用户名是否已经被注册), 最后使用Map集合设置新的返回状态码,并使用 ...