【模板】最小费用最大流(网络流)/洛谷P3381
题目链接
https://www.luogu.com.cn/problem/P3381
题目大意
输入格式
第一行包含四个正整数 \(n,m,s,t\),分别表示点的个数、有向边的个数、源点序号、汇点序号。
接下来\(m\)行,每行包含四个正整数 \(u_i,v_i,w_i,f_i\),表示第 \(i\) 条有向边从 \(u_i\) 出发,到达 \(v_i\),边权为 \(w_i\)(即该边最大流量为 \(w_i\) ),单位流量的费用为 \(f_i\) 。
输出格式
一行,包含两个整数,依次为最大流量和在最大流量情况下的最小费用。
题目解析
(待补充,咕咕咕。。。)
参考代码
\(SPFA\)的两个优化可以有效提升速度。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF = (1LL) << 32;
const int N = 5005;
struct Edge{
int u, v;
ll cap, cost, flow;
};
vector <Edge> e;
vector <int> G[N];
ll a[N], d[N];
int inQ[N], p[N];
int n, m, s, t, cnt;
void addEdge(int u, int v, ll cap, ll cost, int i)
{
e.push_back((Edge){u, v, cap, cost, 0});
e.push_back((Edge){v, u, 0, -cost, 0});
G[u].push_back(i);
G[v].push_back(i^1);
}
bool SPFA(ll &flow, ll &cost)
{
for (int i = 0; i <= cnt; ++i) d[i] = INF;
memset(a, 0, sizeof a);
a[s] = INF, d[s] = 0;
deque <int> Q;
Q.push_back(s);
inQ[s] = 1;
while (!Q.empty())
{
int x = Q.front();
Q.pop_front();
inQ[x] = 0;
for (int i = 0; i <G[x].size(); ++i)
{
Edge &b = e[G[x][i]];
if (b.cap > b.flow && d[b.v] > d[x] + b.cost)
{
d[b.v] = d[x] + b.cost;
p[b.v] = G[x][i];
a[b.v] = min(a[x], b.cap-b.flow);
if (!inQ[b.v] && b.v != t)//优化1:终点无需入队
{
inQ[b.v] = 1;
if (!Q.empty() && d[b.v] < d[Q.front()]) Q.push_front(b.v);//优化2:small label first
else Q.push_back(b.v);
}
}
}
}
if (d[t] == INF) return false;
flow += a[t];
cost += a[t]*d[t];
for (int u = t; u != s; u = e[p[u]].u)
{
e[p[u]].flow += a[t];
e[p[u]^1].flow -= a[t];
}
return true;
}
ll mincostMaxflow(ll &cost)
{
cnt = n; //cnt: count nodes
ll flow = 0;
while (SPFA(flow, cost));
return flow;
}
int main()
{
int u, v;
ll w, c;
scanf("%d%d%d%d", &n, &m, &s, &t);
for (int i = 0; i < m; ++i)
{
scanf("%d%d%lld%lld", &u, &v, &w, &c);
addEdge(u, v, w, c, i << 1);
}
w = mincostMaxflow(c=0);
printf("%lld %lld\n", w, c);
return 0;
}
感谢支持!
【模板】最小费用最大流(网络流)/洛谷P3381的更多相关文章
- 最小费用最大流 学习笔记&&Luogu P3381 【模板】最小费用最大流
题目描述 给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 题目链接 思路 最大流是没有问题的,关键是同时保证最小费用,因此,就可以把 ...
- 【洛谷 p3381】模板-最小费用最大流(图论)
题目:给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 解法:在Dinic的基础下做spfa算法. 1 #include<cst ...
- BZOJ 1449: [JSOI2009]球队收益 最小费用最大流 网络流
https://www.lydsy.com/JudgeOnline/problem.php?id=1449 给每条路加上一个权值,每条路的费用是这条路的流量*权值,求最大流的最小费用. 每次spfa记 ...
- 洛谷.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 - 【模板】最小费用最大流
原题链接 题意简述 模板题啦~ 题解 每次都以费用作为边权求一下最短路,然后沿着最短路增广. Code //[模板]最小费用最大流 #include <cstdio> #include & ...
- 洛谷P3381 最小费用最大流模板
https://www.luogu.org/problem/P3381 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用 ...
- 经典网络流题目模板(P3376 + P2756 + P3381 : 最大流 + 二分图匹配 + 最小费用最大流)
题目来源 P3376 [模板]网络最大流 P2756 飞行员配对方案问题 P3381 [模板]最小费用最大流 最大流 最大流问题是网络流的经典类型之一,用处广泛,个人认为网络流问题最具特点的操作就是建 ...
- 【网络流#2】hdu 1533 - 最小费用最大流模板题
最小费用最大流,即MCMF(Minimum Cost Maximum Flow)问题 嗯~第一次写费用流题... 这道就是费用流的模板题,找不到更裸的题了 建图:每个m(Man)作为源点,每个H(Ho ...
- 洛谷 P4307 [JSOI2009]球队收益 / 球队预算(最小费用最大流)
题面 luogu 题解 最小费用最大流 先假设剩下\(m\)场比赛,双方全输. 考虑\(i\)赢一局的贡献 \(C_i*(a_i+1)^2+D_i*(b_i-1)^2-C_i*a_i^2-D_i*b_ ...
随机推荐
- 2021.9.7考试总结[NOIP模拟49]
T1 Reverse $BFS$暴力$O(n^2)$ 过程中重复枚举了很多点,考虑用链表记录当前点后面可到达的第一个未更新点. 搜索时枚举翻转子串的左端点,之后便可以算出翻转后$1$的位置. $cod ...
- x64 InlineHook 黑魔法
目录 x64 InlineHook 黑魔法 为什么不能用X86 的HOOK方式? 原理:jmp + rip 进行寻址6字节方式跳转 手动InlineHook 临时地址x(找一块空内存) 计算偏移 源地 ...
- IDM使用教程:利用IDM下载百度网盘文件
IDM是什么 其实我使用IDM下载器只是为了方便网页版百度网盘直接下载大于40M文件而已,大家知道文件过大必须打开客户端才能下载,这点对于我的破电脑感觉很烦躁,每次要等待它慢悠悠打开,然后动用我的超级 ...
- elasticsearch7.x配置文件
前言: 以下配置文件基于elasticsearch-7.13.4版本,当然也适用于其它7.x版本 集群环境: 部署3个节点的集群,各个节点不做角色区分,既是master,也是data,在性能 上这种方 ...
- 浅讲.Net 6 并与之前版本写法对比
介绍 昨天vs2022正式版已经推出了,估计很多人已经下载并开始创建.Net 6 开始尝鲜了, 本节我简要的给大家介绍一下.Net 6的一些改动. 正文 本次.Net6带来最明显的变化就是: 采用顶级 ...
- SpringCloud config native 配置
1.概述 最近项目使用springCloud 框架,使用config搭建git作为配置中心. 在私有化部署中,出现很多比较麻烦的和鸡肋的设计. 每次部署都需要安装gitlab 有些环境安装完gitla ...
- 设计模式学习-使用go实现外观模式
外观模式 定义 适用范围 代码实现 优点 缺点 关于接口粒度的思考 参考 外观模式 定义 外观模式也叫门面模式 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接 ...
- 菜鸡的Java笔记 日期操作类
日期操作类 Date 类与 long 数据类型的转换 SimpleDateFormat 类的使用 Calendar 类的使用 如 ...
- 菜鸡的Java笔记 简单JAVA 类的开发原则以及具体实现
/* 现在要求定义一个雇员信息类 在这个类之中包含有雇员编号 姓名 职位 基本工资 佣金等信息 对于此时给定要求实际上就是描述一类事物,而这样的程序类在在java之中可以将其称为简单java类 ...
- 算法学习->整数拆分问题
动态规划典型题目/ 00 题目 将正整数n无需拆分为最大数为k的拆分方案有多少种?要求所有的拆分方案不重复. 示例: 输入:n=5,k=5 输出:(5,5)=7 示例分析: 5=5 5=4+1 5= ...