费用流+SPFA ||【模板】最小费用最大流
题面:【模板】最小费用最大流
代码:
- #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 ||【模板】最小费用最大流的更多相关文章
- 经典网络流题目模板(P3376 + P2756 + P3381 : 最大流 + 二分图匹配 + 最小费用最大流)
题目来源 P3376 [模板]网络最大流 P2756 飞行员配对方案问题 P3381 [模板]最小费用最大流 最大流 最大流问题是网络流的经典类型之一,用处广泛,个人认为网络流问题最具特点的操作就是建 ...
- 【洛谷 p3381】模板-最小费用最大流(图论)
题目:给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 解法:在Dinic的基础下做spfa算法. 1 #include<cst ...
- hdu3667 Transportation 费用与流量平方成正比的最小流 拆边法+最小费用最大流
/** 题目:hdu3667 Transportation 拆边法+最小费用最大流 链接:http://acm.hdu.edu.cn/showproblem.php?pid=3667 题意:n个城市由 ...
- 洛谷.3381.[模板]最小费用最大流(zkw)
题目链接 Update:我好像刚知道多路增广就是zkw费用流.. //1314ms 2.66MB 本题优化明显 #include <queue> #include <cstdio&g ...
- P3381 [模板] 最小费用最大流
EK + dijkstra (2246ms) 开氧气(586ms) dijkstra的势 可以处理负权 https://www.luogu.org/blog/28007/solution-p3381 ...
- P3381 【模板】最小费用最大流
P3381 [模板]最小费用最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行 ...
- ACM/ICPC 之 卡卡的矩阵旅行-最小费用最大流(可做模板)(POJ3422)
将每个点拆分成原点A与伪点B,A->B有两条单向路(邻接表实现时需要建立一条反向的空边,并保证环路费用和为0),一条残留容量为1,费用为本身的负值(便于计算最短路),另一条残留容量+∞,费用为0 ...
- 图论算法-最小费用最大流模板【EK;Dinic】
图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...
- P3381 【模板】最小费用最大流 题解
CSDN同步 原题链接 前置知识: 从三种算法剖析网络流本质 简要题意: 给定网络图,求图的最大流,以及流量为最大流时的最小费用. 现在假设你们看了那篇网络流博客之后,所有人都会了 \(\text{E ...
- poj 2195 二分图带权匹配+最小费用最大流
题意:有一个矩阵,某些格有人,某些格有房子,每个人可以上下左右移动,问给每个人进一个房子,所有人需要走的距离之和最小是多少. 貌似以前见过很多这样类似的题,都不会,现在知道是用KM算法做了 KM算法目 ...
随机推荐
- 企业链表C语言实现
/* * LinkList.h * * Created on: 2019年7月20日 * Author: Administrator */ #ifndef SRC_LINKLIST_H_ #defin ...
- JRE、JDK、JVM 及 JIT 之间有什么不同
java虚拟机(JVM) 使用java编程语言的主要优势就是平台的独立性.你曾经想知道过java怎么实现平台的独立性吗?对,就是虚拟机,它抽象化了硬件设备,开发者和他们的程序的得以操作系统.虚 ...
- KVM 常用命令
显示虚拟机 virsh list --all 停止虚拟机 virsh destroy <name> 启动虚拟机 virsh start <name> 删除虚拟机 virsh u ...
- kafka window安装与配置
一.安装jdk1.8(此处省略) 二.安装zookeeper1. 下载安装包:http://zookeeper.apache.org/releases.html,解压到指定目录(如下) 2. 在系统变 ...
- leetcode 138. Copy List with Random Pointer复杂链表的复制
python代码如下: # Definition for singly-linked list with a random pointer. # class RandomListNode(object ...
- Unsupervised Image-to-Image Translation Networks
Abstract: 无监督图像到图像的翻译目的是学习不同域图像的一个联合分布,通过使用来自单独域图像的边缘分布.给定一个边缘分布,可以得到很多种联合分布.如果不加入额外的假设条件的话,从边缘分布无法推 ...
- Jenkins安装以及配置
Jenkins介绍 Jenkins是一个java开发的.开源的.非常好用持续集成的工具,它能帮我们实现自动化部署环境.测试.打包等等的工作,还可以在构建任务成功或者失败之后给我们发邮件通知. 什么叫持 ...
- C#通用类库
http://www.cnblogs.com/feiyangqingyun/archive/2010/12/20/1911630.html
- Activity启动流程(三)
这里对启动Activity过程中涉及到的ActivityStack.TaskRecord.ActivityRecord.ActivityStackSupervisor进行简单的分析,实际上一张时序图就 ...
- Elasticsearch5安装以及部署Head插件
请看完再动手,两篇文章都是找来的,合并在一起了,前半部分是参考,我是按照后半部分做的,而且执行中间也有坑. Elasticsearch5.X及 head插件 安装说明: 1.下载elasticsear ...