洛谷 3381 【模板】最小费用最大流

https://www.luogu.org/problem/show?pid=3381

题目描述

如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用。

输入输出格式

输入格式:

 

第一行包含四个正整数N、M、S、T,分别表示点的个数、有向边的个数、源点序号、汇点序号。

接下来M行每行包含四个正整数ui、vi、wi、fi,表示第i条有向边从ui出发,到达vi,边权为wi(即该边最大流量为wi),单位流量的费用为fi。

 

输出格式:

 

一行,包含两个整数,依次为最大流量和在最大流量情况下的最小费用。

 

输入输出样例

输入样例#1:
4 5 4 3
4 2 30 2
4 3 20 3
2 3 20 1
2 1 30 9
1 3 40 5
输出样例#1:
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/416335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab impyramid,图像 – Matlab impyramid问题

如果您实际打开了impyramid并查看了源代码,那么归结为一个imresize调用.具体来说,当A被定义为图像时,在调用impyramid时使用expand时会发生这种情况&#xff1a;M size(A,1);N size(A,2);scaleFactor 2;outputSize 2*[M N] - 1;kernel makePiecewiseConstantFunction( ...…

回车键登录

用onkeydown 事件 传递事件对象event 使用事件对象里面的keycode 属性 event事件对象做兼容性 var evtwindow.event || event; function oEnter(event){ var evt window.event||event; if(evt.keyCode13){ checking1(); //按下回车键要执行的函数 }}转载于:https…

php redis.h,swoole安装hredis支持导致php不能加载swoole扩展

操作说明1、下载hiredis编译make -jsudo make installsudo ldconfig2、开始编译swoolephpize./configure --enable-async-redismake cleanmake -jsudo make install环境说明: 操作系统centos,swoole是1.9最新版 hredis也是最新的 ,php 是7.1加载swoole.so之后 重启php-fpm可以成…

matlab零相移滤波,零相移数字滤波器边界效应讨论(附程序与参考文献)

%零相移带通滤波器clcclose allclear all% 滤波器设计%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%N 100;%100秒t 0:0.001:N;%时间Fs 1000;%采样率% 滤波器通止参数设定&#xff1b;fp[0.1 15];fs [0.05 50];rp 1.5;rs 12;wp fp*2*pi/Fs;ws fs*2*pi/Fs;% 阶次&#x…

angularjs1-5,class,

<!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title>无标题文档</title><script type"text/javascript" src"angular.min.js"></…

自己定义ViewGroup控件(一)-----gt;流式布局进阶(一)

main.xml <?xml version"1.0" encoding"utf-8"?> <com.example.SimpleLayout.MyLinLayout xmlns:android"http://schemas.android.com/apk/res/android" xmlns:tools"http://schemas.android.com/tools" android:layout_wi…

oracle计算表的大小,简要分析估算oracle表的大小

查询oracle表的大小有几种方法&#xff0c;笔者简要分析下他们的异同环境&#xff0c;newsadmin.newlog&#xff0c;原本有244,459,078条记录&#xff0c;delete后&#xff0c;现在只有51,109,919记录。一、segmentsselect bytes/1024/1024/1024 from dba_segments where segme…

NOIP2007 count 统计数字

问题描述 某次科研调查时得到了n个自然数&#xff0c;每个数均不超过1.5109。已知不相同的数不会超过10000个&#xff0c;现在需要统计这些自然数各自出现的个数&#xff0c;并按照自然数从小到大的顺序输出统计结果。 输入 输入文件count.in包含n1行&#xff1b; 第一行是…

【C++11/17】std::map高效插入

我们在使用stl的映射容器std::map时&#xff0c;经常需要向容器中插入数据。由于map的元素key值是唯一的&#xff0c;我们经常遇到这样的场景&#xff1a; 向map中插入元素时&#xff0c;指定的key已经存在则直接更新&#xff1b;指定的key不存在&#xff0c;然后才做插入操作…

oracle 监听 无法连接,oracle监听hang,无法建立新连接TNS-12540

TNS-12518: TNS:listener could not hand off client connectionTNS-12540: TNS:internal limit restriction exceeded监听无法建立新连接&#xff0c;报如上错误&#xff0c;请教各位大神是什么原因&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;…

pgd 游戏教程 基地

http://www.pascalgamedevelopment.com/content.php?417-Castle-Game-Engine-6-2-released转载于:https://www.cnblogs.com/delphi-xe5/p/7237464.html

oracle选择外键列,Oracle外键列上是否需要索引?

外键列上缺少索引会带来两个问题&#xff0c;限制并发性、影响性能。而这两个问题中的任意一个都可能会造成严重性能问题。 无论是Or外键列上缺少索引会带来两个问题&#xff0c;限制并发性、影响性能。而这两个问题中的任意一个都可能会造成严重性能问题。无论是Oracle的官方文…

select * 和select 所有字段的区别

文章取自http://blog.csdn.net/u014305991/article/details/44964171 MySQL 5.1.37 表记录数41,547,002&#xff0c;即4000w行 使用远程客户端取1000条数据&#xff0c;统计时间&#xff1a; SELECT * FROM dmsp.dmsp_dimension_content LIMIT 0, 1000; 时间2.218s&#xff0c;…