费用流+SPFA ||Luogu P3381【模板】最小费用最大流
题面:【模板】最小费用最大流
代码:
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<queue>
- #define ll long long
- #define min(a,b) ((a)<(b)?(a):(b))
- #define max(a,b) ((a)>(b)?(a):(b))
- using namespace std;
- inline ll rd(){
- ll x=,f=;char c=getchar();
- while(c<''||c>''){if(c=='-')f=-; c=getchar();}
- while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
- return f*x;
- }
- const int maxn=,maxm=;
- int N,M,num_edge=-,edge_head[maxn],S,T,u,v,w,f,pre[maxn];
- ll Dis[maxn],Fw[maxn],mxfw,mndis;
- bool vis[maxn];
- queue<int>Q;
- struct Edge{int to,nx,from;ll dis,fw;}edge[maxm<<];
- inline void Add_edge(int from,int to,ll fw,ll dis){
- edge[++num_edge].nx=edge_head[from];
- edge[num_edge].from=from;
- edge[num_edge].to=to;
- edge[num_edge].fw=fw;
- edge[num_edge].dis=dis;
- edge_head[from]=num_edge;
- return;
- }
- inline bool SPFA(){
- // for(int i=1;i<=N;i++)
- // Dis[i]=Fw[i]=1ll<<60;
- memset(Dis,0x7f,sizeof(Dis));
- memset(Fw,0x7f,sizeof(Fw));
- memset(vis,,sizeof(vis));
- pre[S]=pre[T]=-;//Imp
- Q.push(S);
- vis[S]=;
- Dis[S]=;
- while(!Q.empty()){
- int x=Q.front();
- Q.pop();
- vis[x]=;
- for(int i=edge_head[x];i!=-;i=edge[i].nx){
- int y=edge[i].to;
- if(edge[i].fw&&edge[i].dis+Dis[x]<Dis[y]){
- Dis[y]=edge[i].dis+Dis[x];
- Fw[y]=min(Fw[x],edge[i].fw);//这一步和Dinic差不多
- pre[y]=i;
- if(vis[y]==){
- Q.push(y);
- vis[y]=;
- }
- }
- }
- }
- if(pre[T]!=-)return ;
- return ;
- }
- inline void FYL(){
- mxfw=mndis=;
- while(SPFA()){
- mxfw+=Fw[T];
- mndis+=Dis[T]*Fw[T];
- for(int i=pre[T];i!=-;i=pre[edge[i].from]){
- edge[i].fw-=Fw[T];
- edge[i^].fw+=Fw[T];
- }
- }
- return;
- }
- int main(){
- memset(edge_head,-,sizeof(edge_head));
- N=rd();M=rd();S=rd();T=rd();
- for(int i=;i<=M;i++){
- u=rd();v=rd();w=rd();f=rd();
- Add_edge(u,v,w,f);
- Add_edge(v,u,,-f);
- }
- FYL();
- printf("%lld %lld\n",mxfw,mndis);
- return ;
- }
By:AlenaNuna
费用流+SPFA ||Luogu P3381【模板】最小费用最大流的更多相关文章
- P3381 [模板] 最小费用最大流
EK + dijkstra (2246ms) 开氧气(586ms) dijkstra的势 可以处理负权 https://www.luogu.org/blog/28007/solution-p3381 ...
- Luogu P3381 (模板题) 最小费用最大流
<题目链接> 题目大意: 给定一张图,给定条边的容量和单位流量费用,并且给定源点和汇点.问你从源点到汇点的最带流和在流量最大的情况下的最小费用. 解题分析: 最小费用最大流果题. 下面的是 ...
- 【洛谷 p3381】模板-最小费用最大流(图论)
题目:给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 解法:在Dinic的基础下做spfa算法. 1 #include<cst ...
- 洛谷P3381 (最小费用最大流模板)
记得把数组开大一点,不然就RE了... 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define int long long 4 ...
- 洛谷.3381.[模板]最小费用最大流(zkw)
题目链接 Update:我好像刚知道多路增广就是zkw费用流.. //1314ms 2.66MB 本题优化明显 #include <queue> #include <cstdio&g ...
- 【BZOJ-2055】80人环游世界 上下界费用流 (无源无汇最小费用最大流)
2055: 80人环游世界 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 321 Solved: 201[Submit][Status][Discus ...
- 最小费用最大流 学习笔记&&Luogu P3381 【模板】最小费用最大流
题目描述 给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 题目链接 思路 最大流是没有问题的,关键是同时保证最小费用,因此,就可以把 ...
- BZOJ-1877 晨跑 最小费用最大流+拆点
其实我是不想做这种水题的QWQ,没办法,剧情需要 1877: [SDOI2009]晨跑 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 1704 Solve ...
- LIbreOJ #6011. 「网络流 24 题」运输问题 最小费用最大流
#6011. 「网络流 24 题」运输问题 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
随机推荐
- (转)IIS Express介绍与使用
IIS Express是什么?IIS Express是为开发人员优化的轻量级.自包含版本的IIS.IIS Express使使用当前最新版本的IIS来开发和测试网站变得容易.它具有IIS 7及以上的所有 ...
- 解决CsvWriter:中文乱码、末尾行多一行空格(/r)、非第一列空字符串""显示null问题
一:主要内容 解决CsvWriter存csv,csv文件打开后中文乱码问题 解决CsvWriter存csv,csv文件最后一行总是多一行空行的问题 解决CsvWriter存csv,csv文件不是第一列 ...
- String2LongUtil
public class String2LongUtil { /** * String类型转换成date类型 * strTime: 要转换的string类型的时间, * formatType: 要转换 ...
- springboot+mybatis+SpringSecurity 实现用户角色数据库管理(一)
本文使用springboot+mybatis+SpringSecurity 实现用户权限数据库管理 实现用户和角色用数据库存储,而资源(url)和权限的对应采用硬编码配置. 也就是角色可以访问的权限通 ...
- MS入门学习笔记
1.建立晶体:选择晶系,添加原子:2.导入系统晶体文件:3.建立分子molecule,画原子:4.计算简单分子molecule:注意事项: 1)做了一个H2O分子,接下来要做一个“立体壳子”,因为CA ...
- Vue知识整理15:组件注册
采用局部注册组件: 将代码放在vue的一个实例中,而不是单列申明.
- 测开之路一百四十九:jinja2模板之宏
jinja2是python的模板引擎, 在写python web使用的过程中,macro可以节省大量的代码 比如上一篇的渲染页面 <!DOCTYPE html><html lang= ...
- 【奇技淫巧】使用 SSH 转发 Sock5 流量
标题:使用 SSH 转发 Sock5 流量 日期:2018-06-27 介绍:使用 ssh 来做个 sock5 的代理,穿透到内网中做后渗透 0x01. 基本信息 在 ubuntu(10.211.55 ...
- spark 怎么去连接 ElasticSearch
https://stackoverflow.com/questions/52659109/cannot-read-from-elasticsearch-using-pyspark https://st ...
- [19/09/16-星期一] Python的运算符和条件判断语句
一.运算符 (1)算术运算符 + 加法运算符(如果是两个字符串之间进行加法运算,则会进行拼串操作) a = 10 + 5 计算 a = 'hello' + ' ' + 'world' 拼串 - ...