洛谷 3381 【模板】最小费用最大流
https://www.luogu.org/problem/show?pid=3381
题目描述
如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用。
输入输出格式
输入格式:
第一行包含四个正整数N、M、S、T,分别表示点的个数、有向边的个数、源点序号、汇点序号。
接下来M行每行包含四个正整数ui、vi、wi、fi,表示第i条有向边从ui出发,到达vi,边权为wi(即该边最大流量为wi),单位流量的费用为fi。
输出格式:
一行,包含两个整数,依次为最大流量和在最大流量情况下的最小费用。
输入输出样例
4 5 4 3 4 2 30 2 4 3 20 3 2 3 20 1 2 1 30 9 1 3 40 5
50 280
说明
时空限制:1000ms,128M
(BYX:最后两个点改成了1200ms)
数据规模:
对于30%的数据:N<=10,M<=10
对于70%的数据:N<=1000,M<=1000
对于100%的数据:N<=5000,M<=50000
样例说明:
如图,最优方案如下:
第一条流为4-->3,流量为20,费用为3*20=60。
第二条流为4-->2-->3,流量为20,费用为(2+1)*20=60。
第三条流为4-->2-->1-->3,流量为10,费用为(2+9+5)*10=160。
故最大流量为50,在此状况下最小费用为60+60+160=280。
故输出50 280。
反边随用随加
只需要在spfa的时候记录路径最小流量
在给每条边减流量的时候新建反边即可
#include<cstdio> #include<queue> #define N 50010 using namespace std; queue<int>q; int n,m,tot; int src,dec; int to[N*2],from[N*2],nextt[N*2],front[N],cap[N*2],cost[N*2],dis[N],pre[N*2]; int minn[N]; bool v[N]; int sum_cost,sum_flow; void add(int u,int v,int f,int w) {to[++tot]=v;from[tot]=u;nextt[tot]=front[u];front[u]=tot;cap[tot]=f;cost[tot]=w; } bool spfa() {for(int i=1;i<=n;i++) dis[i]=0x7fffffff,minn[i]=0x7fffffff;q.push(src);v[src]=true;dis[src]=0;while(!q.empty()){int now=q.front();q.pop();v[now]=false;for(int i=front[now];i;i=nextt[i]){if(dis[to[i]]>dis[now]+cost[i]&&cap[i]>0){dis[to[i]]=dis[now]+cost[i];minn[to[i]]=min(minn[now],cap[i]);pre[to[i]]=i;if(!v[to[i]]){q.push(to[i]);v[to[i]]=true;}}}}return dis[dec]!=0x7fffffff; } int main() {scanf("%d%d%d%d",&n,&m,&src,&dec);int u,v,w,f;for(int i=1;i<=m;i++){scanf("%d%d%d%d",&u,&v,&w,&f);add(u,v,w,f);}while(spfa()){if(sum_cost+minn[dec]*dis[dec]>=0){sum_cost+=dis[dec]*minn[dec];sum_flow+=minn[dec];for(int i=pre[dec];i;i=pre[from[i]]) {cap[i]-=minn[dec];add(to[i],from[i],minn[dec],-cost[i]);}} else{sum_flow-=int(sum_cost/dis[dec]);break;}}printf("%d %d",sum_flow,sum_cost); }
转载于:https://www.cnblogs.com/TheRoadToTheGold/p/7223663.html
洛谷 3381 【模板】最小费用最大流相关推荐
- [SCOI2007]修车,洛谷P2053,最小费用最大流
正题 给出m个师傅,n台车,并给出每个师傅各个车的时间,现在要使得,n辆车一起来,等待时间最短. 我们来观察一个师傅所消耗的等待时间.m个师傅所消耗的总等待时间就是车主的总等待时间. 对于第a个师傅, ...
- 洛谷.4897.[模板]最小割树(Dinic)
题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms ...
- 洛谷4014最大/小费用最大流
题目:https://www.luogu.org/problemnew/show/P4014 #include<iostream> #include<cstdio> #incl ...
- 洛谷 - P4043 [AHOI2014/JSOI2014]支线剧情(最小费用可行流)
题目链接:点击查看 题目大意:给出一张 n 个点的有向图,每条边都有边权,现在要求将每条边至少遍历一遍,问最小的边权为多少 题目分析:建图时将每条边都设置流量为 [ 1 , inf ] ,就变成最小费 ...
- 洛谷 - P1251 餐巾计划问题(最小费用最大流+思维建边)
题目链接:点击查看 题目大意:给出n天每天所需要的新餐巾的数量,现在有多种方式可以获得新餐巾,问如何运营能使花费最少: 直接购买,花费为cost 将脏餐巾送到快洗部,需要洗t1天,花费为c1 将脏餐巾 ...
- 洛谷 - P4009 汽车加油行驶问题(分层图最短路/最小费用最大流)
题目链接:点击查看 题目大意:给出一个n*n的矩阵表示道路,途中有一些加油站,现在要从点(1,1)到达点(n,n),问最小花费,其中的一些规则如下: 汽车只能沿着网格边行驶,装满油后可以行驶K条边,出 ...
- 洛谷 - P4016 负载平衡问题(最小费用最大流)
题目链接:点击查看 题目大意:有n个仓库分布在一个环形的区域,现在每个仓库可以与相邻的两个仓库转移货物,问最少需要操作多少次才能让每个仓库的货物都达到平衡 题目分析:达到平衡的意思其实就是都等于平均值 ...
- 洛谷 P4016 负载平衡问题 【最小费用最大流】
求出平均数sum,对于大于sum的点连接(s,i,a[i]-sum,0),表示这个点可以流出多余的部分,对于小于sum的点连接(i,t,sum-a[i],0)表示这个点可以接受少的部分,然后每个点向相 ...
- 洛谷 P2053 [SCOI2007]修车 网络流 最小费用最大流 Dinic+Spfa
题目链接: https://www.luogu.com.cn/problem/P2053 思路参考博客: https://www.luogu.com.cn/blog/a23333/solution-p ...
- 洛谷P3980 志愿者招募——费用流
洛谷P3980 [NOI2008]志愿者招募--费用流 题目介绍 题目描述 输入格式 输出格式 测试样例 题解 代码 题目介绍 题目描述 链接: 传送门. 申奥成功后,布布经过不懈努力,终于成为奥组委 ...
最新文章
- cocos2d-x的win32编译环境
- 【Python】机器学习绘图神器Matplotlib首秀!
- 为什么要将对象序列化
- Springboot第二篇:与前端fetch通信(附springboot解决跨域方法)
- Android中的一些基础知识(二)
- 报告PPT(123页):Python编程基础精要
- DBS-Function:f_GetPy
- Memcached集群/分布式/高可用 及 Magent缓存代理搭建过程 详解
- Laravel响应宏原理
- Linux快捷键详解
- matlab中散点图的线性拟合_matlab画散点图并拟合函数曲线MATLAB画散点图和二次函数...
- 微信html页面缓存问题,浅谈微信页面入口文件被缓存解决方案
- apk是什么意思以及apk里面有什么东西
- 鲁大师2023年Q1手机报告:ColorOS蝉联榜首
- 2072-歌手大奖赛
- mybatis的example
- 【TensorFlow】神经网络中间层截取、可视化中间层结果
- linux驱动之LCD驱动框架
- 应用线性代数简介 - 向量,矩阵和最小二乘法 By Stephen Boyd and Lieven Vandenberghe
- Minitab 21 功能列表
热门文章
- Windows 7 文件夹共享
- python下设置urllib连接超时
- 封送处理您的数据:利用 COM 和 Windows 2000 的高效传输数据的技术
- react学习(48)--编辑回显用moment处理
- 前端学习(2996):vue+element今日头条管理--代码测试规范
- 前端学习(2929):vue改变多个样式的组合
- [html] 如何给input的右上角加个清除的按钮?
- PS教程第十九课:移动工具
- [css] 相邻兄弟选择器、后代选择器和子选择器三者有什么区别?
- 工作260:js判断一个数组是否包含一个指定的值