首页 > 其他分享 >费用流

费用流

时间:2024-03-02 13:23:43浏览次数:7  
标签:费用 短路 流量 入点 出点 例题

在最大流中,每条边只有一个容量参数。如果再加上一个费用,就成为了费用流。

下面借助例题来理解费用流:

洛谷-P3381

简化版题意:

给定一个网络。每条边有容量 \(w_i\) 与费用 \(c_i\),代表这条边的最大流量为 \(w_i\),每流一个单位需要花费 \(c_i\)。
求出这个网络的最大流,以及所有最大流中费用最小的一个流的费用。

费用流的常用解决方法是最大流 \(+\) 最短路。

在最大流的 Edmonds-Karp 算法中,我们使用 BFS 来求路径。在费用流中,我们可以使用 SPFA 求一条费用最小的路径,然后再计算该路径的最大流。这样不断求路径,直到没有路径,就可以求出最小费用了。

在建反向边时,反向边的权值应为正向边权值的相反数,这和最大流中反向边流量的原理相同。

时间复杂度如何?设总流量为 \(F\),每条路径至少有一个流量,每次 SPFA 的时间复杂度为 \(\mathcal{O}(NM)\),因此时间复杂度为 \(\mathcal{O}(FNM)\)。

下面给出例题的代码:

代码

费用流有很多应用。下面给出几种应用:

例题 POJ-2135 翻译

因为是无向图,所以从终点到起点与从起点到终点是相同的。题目也就变为从起点到终点走两次,每条边只能走一次,求最短路。

如果采用贪心法,先走一次最短路,然后删除这些边,再走一次最短路,那么可能会出现错误。如下图:

删除边后,图不连通,无法求最短路。

该题可以用费用流求解。

每条边的流量为 \(1\),代表只能走一次。建一个超级源点 \(s\) 与一个超级汇点 \(t\),\(s \to 1\) 与 \(n \to t\) 之间都有一条流量为 \(2\),费用为 \(0\) 的边,代表可以走两次。接下来计算费用流即可。

代码

例题 洛谷-P1004

方格取数问题可以使用费用流求解。

但是有个问题:在费用流中边只能走一次,而本题中点的权值只能计算一次。那该怎么办呢?

本题可以使用入出点的技巧。为每个点设一个入点和一个出点,每个点的入点连向出点,出点连向其他点的入点。

入点连向出点两条边,一条的流量为 \(1\),费用为该点的权值,代表只能计算一次;另一条的流量为 \(2\),费用为 \(0\),代表不计算该点权值。出点连向入点一条流量为 \(2\),费用为 \(0\) 的边。再用一个超级源点 \(s\) 和超级汇点 \(t\),连边方式与上题相同。那么这道题就做出来了。

还需要注意的是本题为最大费用最大流,即用 SPFA 求的是最长路。

代码

标签:费用,短路,流量,入点,出点,例题
From: https://www.cnblogs.com/lrxmg139/p/18048530

相关文章

  • 浅谈EK求网络流 & 最小费用最大流
    1.简介:网络流,指的是一种图上问题。首先我们要知道什么是网络。网络的性质如下:有且仅有一个点入度为0,且只有一个点出度为0,我们把入读为0的点叫做源点,出度为0的点为汇点。网络是一个有向图,且有边权。那么流是什么呢?考虑对于下面这个网络:其中\(s\)是源点,\(t\)......
  • 费用流例题
    1.k取方格数一个矩阵格子,从最左上角出发到最右下角,走k次,每个格子上有一个数,走过一次就变为0,问能取到的所有数字之和最大值。每个点i拆成两个点i和i'(左半边与右半边),两点之间连两条边一条容量为1,费用为-a[i],另一条容量为无穷,费用为0每个点的右半边与相邻点的左半边连起来......
  • 免费工具 Winsw 和 NSSM 适合对服务管理功能有一定要求的用户,且不想花费额外费用;SRVAN
    免费工具:SRVANY:优点:允许将任何可执行文件转换为服务。Windows自带工具,无需额外安装。简单易用,适合基本的服务管理需求。缺点:功能相对简单,不支持高级的服务管理功能。不再得到官方支持和更新,可能存在一些稳定性问题。Winsw:优点:简单易用,提供了一个简单的配置......
  • 【博客】网络流&&费用流
    网络流前言当听到网络流量之后感觉是在充话费网络流(network-flows)是一种类比水流的解决问题方法,与线性规划密切相关。它模拟了水流从起点经过复杂的网络流向终点的过程就像自来水厂的水经过无数根水管子流到了家里而最大流就是最多有多少水流到了家里算法流程EK......
  • 反悔贪心(模拟费用流)
    反悔贪心(模拟费用流)贪心本身是不能反悔的,但如果当前最优解不是全局最优解,我们就需要通过反悔来贴近全局最优解。一般用堆来实现,即堆中维护当前可以用来反悔的决策,然后每次取最优的决策。其实从更一般的角度,反悔贪心就是建出费用流模型,然后用数据结构来模拟增广的操作。一些例题......
  • 学编程千万别上培训机构:费用、通用性和实战经验都不行
    学编程是一项极富挑战性的任务,而不是一件能够轻松完成的事情。很多人在学习编程的时候都会考虑去培训机构学习,然而,在现实中,并不是每个人都能从培训机构中获得真正的技术提升,相反,有许多学习编程的人,尤其是想从事IT行业的人,其实更适合采用其他的学习方式。以下是一些理有据的观点,用来......
  • 【板子】费用流(zkw/Dinic)
    //lgp3381#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintN=(int)5e3+3;constintM=(int)5e4+4;constllINF=0x3f3f3f3f;intcur[N];lldis[N];boolvis[N];boolinq[N];intedgeid=1;inthead[N];structedge{in......
  • 费用流求解二分图最大权匹配
    二分图最大权匹配问题:有\(n_1\)个左部点,\(n_2\)个右部点,\(m\)条边,边有边权\(w_i\),表示若选择这条边就会获得\(w_i\)的收益,求获得收益最大的一种图的匹配方案。若考虑用费用流求解,建立超级源点\(S\)和超级汇点\(T\),\(S\)向每个左部点连边,流量1费用0;每个右部点向\(......
  • 上下界 可行/最大/最小 网络流/费用流(有/无源汇)
    对网络的定义进行扩展,我们可以得出一堆奇奇怪怪的网络。上下界令\(Max_e\)为边\(e\)的流量上界,\(Min_e\)为边\(e\)的流量下界,一条边的流量\(f_e\)要满足\(Min_e\lef_e\leMax_e\),除此之外和普通网络流定义相同,可以发现,普通的网络就是下界为\(0\)的网络。无源汇......
  • 办理房屋产权证需要缴纳费用有哪些
    一、办理房屋产权证需要缴纳费用有哪些办理房屋产权证需要缴纳费用有:1.居民住宅每套80元,如有共有权证增收工本费10元/本。2.印花税:分为“产权转移书据”印花税和“权利、许可证照”印花税。“产权转移书据”税目税率为万分之五,计税依据为书据中所载的金额,买卖双......