题目链接

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的更多相关文章

  1. 最小费用最大流 学习笔记&&Luogu P3381 【模板】最小费用最大流

    题目描述 给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 题目链接 思路 最大流是没有问题的,关键是同时保证最小费用,因此,就可以把 ...

  2. 【洛谷 p3381】模板-最小费用最大流(图论)

    题目:给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 解法:在Dinic的基础下做spfa算法. 1 #include<cst ...

  3. BZOJ 1449: [JSOI2009]球队收益 最小费用最大流 网络流

    https://www.lydsy.com/JudgeOnline/problem.php?id=1449 给每条路加上一个权值,每条路的费用是这条路的流量*权值,求最大流的最小费用. 每次spfa记 ...

  4. 洛谷.3381.[模板]最小费用最大流(zkw)

    题目链接 Update:我好像刚知道多路增广就是zkw费用流.. //1314ms 2.66MB 本题优化明显 #include <queue> #include <cstdio&g ...

  5. P3381 [模板] 最小费用最大流

    EK  + dijkstra (2246ms) 开氧气(586ms) dijkstra的势 可以处理负权 https://www.luogu.org/blog/28007/solution-p3381 ...

  6. 洛谷P3381 - 【模板】最小费用最大流

    原题链接 题意简述 模板题啦~ 题解 每次都以费用作为边权求一下最短路,然后沿着最短路增广. Code //[模板]最小费用最大流 #include <cstdio> #include & ...

  7. 洛谷P3381 最小费用最大流模板

    https://www.luogu.org/problem/P3381 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用 ...

  8. 经典网络流题目模板(P3376 + P2756 + P3381 : 最大流 + 二分图匹配 + 最小费用最大流)

    题目来源 P3376 [模板]网络最大流 P2756 飞行员配对方案问题 P3381 [模板]最小费用最大流 最大流 最大流问题是网络流的经典类型之一,用处广泛,个人认为网络流问题最具特点的操作就是建 ...

  9. 【网络流#2】hdu 1533 - 最小费用最大流模板题

    最小费用最大流,即MCMF(Minimum Cost Maximum Flow)问题 嗯~第一次写费用流题... 这道就是费用流的模板题,找不到更裸的题了 建图:每个m(Man)作为源点,每个H(Ho ...

  10. 洛谷 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_ ...

随机推荐

  1. Windows平台编译器相关的几个预定义宏

    WIN32 是在windows.h 中定义的宏,包含winodws.h则定义该宏 _WIN32/_WIN64跟windows平台有关的宏,_WIN32在windows   32位和64位下都有该宏,_ ...

  2. Ubuntu用apt安装MySQL

    这里以MySQL5.7为例. # 如果之前有安装旧版,先移除sudo apt-get --purge remove mysql-server mysql-client mysql-common # 安 ...

  3. IDEA升级开源框架

    在开发过程中,我们经常会用到一些 GitHub或者Gitee上的开源框架来快速搭建我们的业务系统,但是当框架被我们大批量修改后,开源框架又有升级了.这时候升级框架就变得很麻烦,也不能直接直接进行合并, ...

  4. redis的一般使用和常规配置

    https://www.cnblogs.com/HTLucky/p/12027889.html Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANS ...

  5. Java安全之Thymeleaf SSTI分析

    Java安全之Thymeleaf SSTI分析 写在前面 文章首发:https://www.anquanke.com/post/id/254519 最近看了一遍Thymeleaf,借此机会学习一下Th ...

  6. google-chrome 启动报错 nss_util.cc(627)] NSS_VersionCheck("3.26") failed. NSS >= 3.26 is required

    一.错误情况 报错如下: [0807/144244.712736:FATAL:nss_util.cc(627)] NSS_VersionCheck("3.26") failed. ...

  7. prometheus(4)之alertmanager报警插件

    报警处理流程如下: 1. Prometheus Server监控目标主机上暴露的http接口(这里假设接口A),通过Promethes配置的'scrape_interval'定义的时间间隔,定期采集目 ...

  8. 性能工具之代码级性能测试工具ContiPerf

    前言 做性能的同学一定遇到过这样的场景:应用级别的性能测试发现一个操作的响应时间很长,然后要花费很多时间去逐级排查,最后却发现罪魁祸首是代码中某个实现低效的底层算法.这种自上而下的逐级排查定位的方法, ...

  9. offsetX各种值总结

    pageX: 页面X坐标位置 pageY: 页面Y坐标位置 screenX: 屏幕X坐标位置 screenY: 屏幕Y坐标位置 clientX: 鼠标的坐标到页面左侧的距离 clientY: 鼠标的坐 ...

  10. Java基础复习之数组

    Java基础复习之:数组 简介 数组(Array):多个相同数据类型按照一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理 一维数组 一维数组的声明与初始化 int[] id ...