网络流
文章平均质量分 53
网络流经典题目与模板整理
哈希表扁豆
此人不懒,但什么都没写
展开
-
【模板】最小割树(Gomory-Hu Tree)
Problem Solution 做模板使用,不证明(不会证 。 原图中两点间的最小割为最小割树上两点间最小割,可通过树上倍增询问。 最小割树的建立:任意两点间的最小割将当前点集分成两部分,以此为基础分治,每次从当前点集中任取两点求最小割,将最小割作为Gomory-Hu Tree上两点间的边权,并根据最小割将当前点集分成两部分,s那边的与t那边的,边界就是当前点集中只有一个点。 相当于跑了n-1次dinic。 Code #include<iostream> #include<cstd原创 2022-05-16 23:05:49 · 247 阅读 · 0 评论 -
P3308 [SDOI2014]LIS(最小割可行边)
Problem 给定序列A,序列中的每一项Ai有删除代价Bi和附加属性Ci。请删除若干项,使得A的最长上升子序列长度减少至少1,且付出的代价之和最小,并输出方案。 如果有多种方案,请输出将删去项的附加属性排序之后,字典序最小的一种。 Solution 考虑建立流量网络:对序列中的每一项进行拆点连边,i to i+n容量为bi,dp(i)表示以序列第i项结尾的最长上升子序列长度,沿最长上升子序列连边,若j<i且a[i]>a[j]且dp(i)=dp(j)+1,j+n to i连容量为inf的边,源原创 2022-05-03 22:51:49 · 334 阅读 · 0 评论 -
二分图最小顶点覆盖
Problem 方格上有一些给定点,每次可以覆盖一行或者覆盖一列,求覆盖所有给定点的最小次数。 Solution 将行最为左边的点,列作为右边的点,对于每个给定点行向列连边,二分图最大匹配即为答案。 合法性:最大匹配的基础上所有的点一定会被覆盖。 最优性: ...原创 2021-09-03 17:01:26 · 279 阅读 · 0 评论 -
UVA1663 净化器 Purifying Machine(二分图匹配)
Problem Solution 得到了二分图匹配的提示才想到怎么做,还是太笨了 。 一个模板可能匹配一个串或两个串,要让匹配两个串的模板尽可能的多,建立二分图,能用一个模板匹配的串连边,设最大匹配为ans,给定的模板集合所能匹配的串数为ele,答案即为ele-ans+ans/2。 位运算小技巧:x第y位置0: x|=(1<<y);x第y位置1:x&=~(1<<y)。 Code #include<iostream> #include<cstring&g原创 2021-08-31 20:15:40 · 172 阅读 · 0 评论 -
B2 - H - Historic Exhibition(二分图匹配+优化建图)
Problem n个花瓶,每个花瓶有一个编号,m个台柱,台柱上下各有两个编号,当花瓶编号与台柱编号相匹配时花瓶才能放在台柱上,每个台柱上最多能放一个花瓶,求能否将所有花瓶放上台柱,输出方案。n<=1e4,m<=1e4,编号不超过1e4。 Solution 一上来想到了二分图匹配,但是如果是用花瓶直接与台柱匹配,在两边编号几乎相同的情况下边数会达到1e8,因此要优化建图,用编号与花瓶匹配,这样中间的边不超过2m。 具体来说,源点向编号连当连容量为前编号出现次数的边,编号向有次编号的台柱连容量为1的原创 2021-08-03 16:01:10 · 126 阅读 · 0 评论 -
Help Little Laura(循环流转最大流求解)
题意 给定一个平面上的一些有向边,每条边涂色费用为 dx-y , 其中 d 为两点间的欧几里得距离(实数), x,y 为题中给定参数。环路的涂色费用为其上各边涂色费用和。找出一些环路,这些环路没有边相交,且环路涂色费用总和最大。 最大费用循环流 建一个费用流模型,在原图的基础上每条边容量为1,费用为边权,找一个流使得所有结点入流等于出流使得总费用最大,因无源点汇点且无最大流的说法,每个点流量平衡,称为最大费用循环流问题,可将所有边的费用取负,转换为最小费用循环流问题。 最小费用循环流求法 建图:原图中权值原创 2020-12-23 00:16:02 · 290 阅读 · 0 评论 -
P3357 最长k可重线段集问题
问题描述 给定平面上n个开线段,从中选取若干线段,使得在任意直线x=p与这些线段相交的个数不超过k的前提下所选线段的长度和最大,线段长度定义为线段两端点的欧几里得距离下取整。 问题分析 乍一看与最长k可重区间集问题很像,转换成在线段上点的覆盖问题,对每一个线段进行离散化,运用“串并联”的思想建图: 将线段投影到x轴上左端点向右端点脸容量为1,权值为长度的边,限制每个线段只能选一次; 源点1向所有左端点连容量为1,权值为0的边,所有右端点向汇点连权值0,流量为1 的边,源点2向源点1连权值0,流量k原创 2020-12-20 00:48:53 · 178 阅读 · 1 评论 -
P3356 火星探险问题
点权版的深海机器人问题,主意输出方案的判断条件不要写错!这里的方法是把残余网络的剩余流量转换成实际流量。 #include <iostream> #include <cstdio> #include <queue> #include <cstring> using namespace std; const int maxn=4005,maxm=20005,inf=0x7f7f7f7f; int n,a,b,g[40][40],last[maxn],cur[.原创 2020-12-17 21:06:44 · 103 阅读 · 0 评论 -
汽车加油行驶问题(分层图)
问题描述 单纯通过流量来限制问题中的流量似乎怎么建图也办不到,因此我们可以对原网格图进行分层,第0层代表当前油量为k,第k层代表当前油量为0,对于i层向其i+1层的相邻点按照题目要求连边,流量为inf,向左或者向上连边时费用为b; 处理油库:由于存在油库时为强制消费,因此对于油库点我们从第1层到第k层分别向第0层的这个点连边费用a,流量inf的边,并且油库点中只有第0层向其它位置的点连边,代表强制加油; 建油库:,第1到k层的每个点向第0层的该点连a+c费的边即可,流量为1; 源点向第0层的(1,1)连流.原创 2020-12-15 20:42:08 · 325 阅读 · 0 评论 -
最小割求最大权闭合子图整理
由于原图的边都是无穷大,那么割边一定是与源点s或汇点t相连的。 割掉s与i的边,表示不选择i点作为子图的点; 割掉i与t的边,表示选择i点为子图的点。 如果s与i有边,表示i存在子图中; 如果i与t有边,表示i不存在于子图中。......原创 2020-12-12 00:14:05 · 430 阅读 · 0 评论 -
P3358 最长k可重区间集问题
问题描述:给定n个开区间,从中选取若干个,使得每个数的被覆盖次数不超过k,且选取的区间长度和最大; 建图方法:将区间上的端点视为图中的点,对于每个区间,左端点向右端点连权值为区间长度,容量为1(保证了每个区间只选一次)的边,源点向所有的左端点连权值为0,容量为1的边,所有的右端点向汇点连权值为0,容量为1的边,对于每个不重叠的区间,左边区间的右端点向右边区间的左端点连权值为0,容量为1的边,这样就形成了若干组串联关系;现在考虑并联,流并联的两条链等价于覆盖次数+2,现在问题就变成了选取k条权值最大的串联链.原创 2020-12-10 11:40:19 · 161 阅读 · 0 评论 -
从割的角度求解问题
P2774 方格取数问题 P3355 骑士共存问题 两道题大体上的建图方式一致,通过横纵坐标和的奇偶性将网格上的点分成两部分,一部分连源点,一部分连汇点;为什么要考虑转化成二分图? 因为两道题的共性在于相互之间可能存在限制的两点的横纵坐标和奇偶性不同,这样对限制关系所连边的两点分别位于二分图的两边,网络流中的“流”又常常可以用来表达限制条件; 考虑方格取数问题:从删的角度看,希望从原网格中删掉一些方格使得剩余方格不再存在互斥关系且权值和最大。具体建图方式如下:源点连向坐标和为奇数的点,容量为方格权值,坐标.原创 2020-12-10 11:13:17 · 72 阅读 · 0 评论