Luogu P3381 (模板题) 最小费用最大流
<题目链接>
题目大意:
给定一张图,给定条边的容量和单位流量费用,并且给定源点和汇点。问你从源点到汇点的最带流和在流量最大的情况下的最小费用。
解题分析:
最小费用最大流果题。
下面的是MCMF的模板。想学ZKW费用流和最小费用流的原始对偶 (Primal-Dual) 算法的同学,可以看看ZKW本人(Orz)的讲解 >>>
#include <bits/stdc++.h>
using namespace std;
int h[],d[],used[],que[],last[];
int cnt=,INF=0x3f3f3f3f,ans1=,ans2=;
#define clr(a,b) memset(a,b,sizeof(a))
template<typename T>
inline void read(T&x){
x=;int f=;char c=getchar();
while(c<'' || c>''){ if(c=='-')f=-;c=getchar(); }
while(c>='' && c<=''){ x=x*+c-'';c=getchar(); }
x*=f;
}
struct Edge{ int to,cap,cost,next; }e[]; inline void add(int from,int to,int c1,int c2){
e[++cnt]=(Edge){to,c1,c2,h[from]};h[from]=cnt;
e[++cnt]=(Edge){from,,-c2,h[to]};h[to]=cnt;
}
bool spfa(int s,int t){ //slf优化
clr(last,);clr(d,INF);clr(used,);
int head,tail;
tail=head=;
que[tail]=s;used[s]=;d[s]=;
while(head<=tail){ //数组模拟双端队列
int x=que[head++];
for(int i=h[x];i;i=e[i].next){
if(e[i].cap&&d[x]+e[i].cost<d[e[i].to]){ //如果这条路上还有残余容量,就更新其费用,让其费用最小
d[e[i].to]=d[x]+e[i].cost;
last[e[i].to]=i; //记录这个点的最大费用所对应的前一条边的编号
if(!used[e[i].to]){
if(d[e[i].to]<d[que[head]])que[--head]=e[i].to; //如果这个点的费用小于队列的头部的话,就将它塞入队列头部
else que[++tail]=e[i].to; //否则的话,塞入队尾
used[e[i].to]=;
}
}
}
used[x]=;
}
return d[t]!=INF;
}
void MCMF(int t){
int minn=INF;
for(int i=last[t];i;i=last[e[i^].to])minn=min(minn,e[i].cap); //沿着那个记录的反向增广路径更新这条路上的最小容量
ans1+=minn;
for(int i=last[t];i;i=last[e[i^].to]){
ans2+=e[i].cost*minn; //费用=单位流量费用*流量
e[i].cap-=minn; //正向边容量-=minn
e[i^].cap+=minn; //反向边容量+=minn
}
}
int main(){
int n,m,s,t;
read(n);read(m);read(s);read(t);
for(int i=;i<=m;i++){
int x,y,w,f;read(x);read(y);read(w);read(f);
add(x,y,w,f);
}
while(spfa(s,t))MCMF(t);
printf("%d %d\n",ans1,ans2);
}
Luogu P3381 (模板题) 最小费用最大流的更多相关文章
- 费用流+SPFA ||Luogu P3381【模板】最小费用最大流
题面:[模板]最小费用最大流 代码: #include<cstdio> #include<cstring> #include<iostream> #include& ...
- P3381 【模板】最小费用最大流
P3381 [模板]最小费用最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行 ...
- P3381 【模板】最小费用最大流(MCMF)
P3381 [模板]最小费用最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入格式 第一行包含四个正整数N ...
- 洛谷P3381 - 【模板】最小费用最大流
原题链接 题意简述 模板题啦~ 题解 每次都以费用作为边权求一下最短路,然后沿着最短路增广. Code //[模板]最小费用最大流 #include <cstdio> #include & ...
- 费用流+SPFA ||【模板】最小费用最大流
题面:[模板]最小费用最大流 代码: #include<cstdio> #include<cstring> #include<iostream> #include& ...
- Luogu--3381 【模板】最小费用最大流
题目链接 3381 [模板]最小费用最大流 手写堆版本 dijkstra 400+ms 看来优先队列的常数好大 #include<bits/stdc++.h> using namesp ...
- 最小费用最大流 学习笔记&&Luogu P3381 【模板】最小费用最大流
题目描述 给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 题目链接 思路 最大流是没有问题的,关键是同时保证最小费用,因此,就可以把 ...
- 最小费用最大流(luogu P3381 【模板】最小费用最大流)
题目链接 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S. ...
- 洛谷 P3381【模板】最小费用最大流
题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表 ...
随机推荐
- centos6 & centos 7 防火墙设置
转载:原文地址:http://blog.csdn.net/u011846257/article/details/54707864 Centos升级到7之后,内置的防火墙已经从iptables变成了fi ...
- SQL 耗时优化
Ø 简介 在平常的开发中,我们经常会编写各种各样的 SQL 语句,比如:SQL 查询.存储过程.或者视图查询等.当我们编写的 SQL 语句比较复杂,或者表的数据量比较大,导致查询超时!这时,就要去分 ...
- 将JSON转换成MAP的工具类
package com.xxxx.util; import java.io.BufferedReader; import java.io.InputStream; import java.io.Inp ...
- js操作ListBox列表(select)内移动
<script> function listBoxClick(obj, addName) { var $objSelected = $(obj).find("option:sel ...
- PHP数组函数详解大全
一.数组操作的基本函数 数组的键名和值 array_values($arr);获得数组的值 array_keys($arr);获得数组的键名 array_flip($arr);数组中的值与键名互换(如 ...
- 全局API
Vue.extend( options ): extend创建的是一个组件构造器,而不是一个具体的组件实例 //选项对象 baseOptions let baseOptions= { template ...
- 软件测试之实际工作工作方式001--log4
软件测试之实际工作工作方式001--log4 Dotest软件测试-董浩整理 领导安排任务后: 1)首先要确认理解:是指的某工作吗?具体有什么要求吗?时间截止到什么时候? 解析: a.万一 ...
- 剑指Offer编程题3——从尾到头打印链表
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 题目解析 方法1:建立两个vector,第一个用来存储正向访问的数据,第二个用来反向存储. /** * struct L ...
- Consumer高级特性
Queue队列的消息一般是按照顺序各个队列依次获取消息,每次获取一个.所以假设有两个队列queue1,queue2,发送的消息为1.2.3.4.5.则默认情况下queue1获取到的消息为1.3.5,q ...
- python之面试复习
待整理:osi七层协议,tcp三次握手四次挥手 1.Http协议(超文本传输协议) 是一种传输数据的格式. 建立在TCP之上 一次请求一次响应,然后断开连接(短连接,无状态) 请求:请求头 \r\n\ ...