题目链接

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. Netty:Netty的介绍以及它的核心组件(二)—— ChannelFuture与回调

    Callback 回调 一个 Callback(回调)就是一个方法,一个提供给另一个的方法的引用. 这让另一个方法可以在适当的时候回过头来调用这个 callback 方法.Callback 在很多编程 ...

  2. SpringBoot:Spring容器的启动过程

    一.简述 Spring的启动过程就是IoC容器的启动过程,本质上就是创建和初始化Bean的工厂(BeanFactory),BeanFactory是整个SpringIoC的核心,Spring使用Bean ...

  3. 转:VIVADO使用技巧:设置DCI与内部参考电压

    本文转自:Vivado使用技巧(12):设置DCI与内部参考电压 - 灰信网(软件开发博客聚合) (freesion.com) DCI与内部参考电压 Xilinx FPGA提供了DCI(Digital ...

  4. spring-cloud-square源码速读(spring-cloud-square-okhttp篇)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  5. VNC服务器的搭建(带图形化支持)

    环境:centos7.6最小化安装 图形化支持 如果希望安装简单的图形支持的话,仅包含gnome的最最最最基础的包的话可以使用以下命令 yum groups install "X Windo ...

  6. LOTO虚拟示波器软件功能演示之——FIR数字滤波

    本文章介绍一下LOTO示波器新出的功能--FIR数字滤波的功能. 在此之前我们先来了解一下带通滤波和带阻滤波.我们都知道每个信号是不同频率不同幅值正弦波的线性叠加,为了方便直接得观察到这种现象,就有了 ...

  7. 将Linux中文语言修改成英文的具体操作方法及报错解决

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  8. 『与善仁』Appium基础 — 9、补充:C/S架构和B/S架构说明

    目录 1.C/S架构和B/S架构概念 2.C/S结构与B/S架构的区别 3.C/S架构和B/S架构优点和缺点 (1)B/S模式的优点和缺点: (2)C/S模式的优点和缺点: 1.C/S架构和B/S架构 ...

  9. Python基础(使用模块)

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- ' a test module ' __author__ = 'Michael Liao' import ...

  10. tomcat访问的重定向问题

    症状: tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误.同时其他项目页面也不能访问. 关闭eclipse里面的tomc ...