您的位置:首页 > 理论基础 > 计算机网络

网络流总结

2017-01-27 22:00 127 查看
时间复杂度上限O(n2∗m),n为点数m为边数

网络流24题

搭配飞行员:   最大匹配

魔术球问题:   最少路径覆盖

餐巾纸 :      拆点最小费用最大流

太空飞行计划:  条件依赖最小费用最大流

最小路径覆盖:  最大流(点数-最大匹配数)

圆桌聚餐:    最大流(二分图)

最长递增子序列: 分层图最大流

试题库:     条件依赖最大流

方格取数问题:  黑白染色最小割(别染错了)

骑士共存:    黑白染色+最小割

负载平衡:    最小费用最大流

运算分配:    最小费用最大流(同上)

分配问题:    最小费用最大流(同上)

bzoj3638&3267&3502&3272    费用流建图+线段树模拟增广

题意:

给一列数,要求支持操作:

1.修改某个数的值

2.读入l,r,k,询问在[l,r]内选不相交的不超过k个子段,最大的和是多少。

bzoj3345 Minimum Cut      最小割树

题意:

有一个N(<=500)的无向图,求将这个图断成两个联通块需要删除的边的边权和最小值。

bzoj1733 神秘的挤奶机      二分+最大流

题意:

给出一个无向图,从s走到t弄出k条不重复边的路径,求所有边中最大值的最小值是多少

bzoj2879 美食节         费用流

题意:

m个厨师,n种菜,每种菜需要做pi份,每个厨师做第i种菜用时ti,j。一个厨师做完一道菜才能做下一道。每份菜的时间是这个厨师做完这道菜的用时加上之前做过的菜的用时。问做完所有的菜的最小用时是多少。(n≤40,m≤100,∑pi≤800,ti,j≤1000)

bzoj3280 小R的烦恼         费用流

题意:

n天,第i天需要a[i]个研究生。m所大学,第j所大学共有l[j]个研究生,一个研究生需要p[j]元钱,一个研究生干一天就濒死。k家医院,第i家医院医治一个濒死的研究生需要d[i]天,并且需要q[i]元钱。

问最少花多少钱,能够在这n天中满足每天的需要呢?若无法满足,则请输出”impossible”

bzoj2424 订货           费用流

题意:

某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,问如何安排这n个月订购计划,才能使成本最低?假设仓库容量为S。

bzoj2039 employ人员雇佣     最小割

题意:

有N个经理,Ei,j表示i经理对j经理的了解程度,当经理i和经理j同时被雇佣时,利润增加Ei,j∗2。同时,雇佣每一个经理都需要花费一定的金钱Ai。没有被雇佣的人会被竞争对手所雇佣,使得所赚得的利润减少Ei,j(意思是经理i和j如果只雇佣一个,就会少Ei,j,如果两个都没被雇佣就不扣钱)。求最大利润。N≤1000

bzoj3442 学习小组         费用流

题意:

共有n个学生,m个学习小组,每个学生只愿意参加其中的一些学习小组,且一个学生最多参加k个学习小组。每个学生参加学习小组财务处都收一定的手续费,不同的学习小组有不同的手续费。若有a个学生参加第i个学习小组,财务处支付奖励Ci∗a2元。在参与学生(而不是每个学习小组的人数总和)尽量多的情况下,求财务处最少要支出多少钱。

bzoj2965 保护古迹     ☆☆☆平面图转对偶图+最小割☆☆☆

题意:

题目大意:给定一个平面图以及一些点,给出能建的边的代价,求将1个、2个、3个……点围起来所需要的最小代价。

bzoj2661 连连看         拆点费用流

题意:

给出一个闭区间[a,b]中的全部整数,如果其中某两个数x,y(设x>y)的平方差x2−y2=z2,并且y与z互质,那么就可以将x和y一起消除,同时得到x+y点分数。求消除的数对尽可能多的前提下分数的最大值。

bzoj2864 战火星空        最大流

bzoj1930 pacman 吃豆豆     费用流

题意:

在二维平面上有若干个点,求出两条不相交的二维LIS,使得上面包含的点的数目最多

bzoj2245

bzoj2597

bzoj3308

bzoj4554

bzoj4842

bzoj3882

bzoj3171

bzoj1877

bzoj4625

bzoj2668

bzoj2324

bzoj3993 星际战争        二分+最大流

题意:

有n个机器人和m个激光武器,每个武器有一个威力和能打的集合,同一时刻只能打一个机器人,问最少多久可以全灭

bzoj3931 网络吞吐量       最短路+最大流

bzoj3218 a+b       ☆☆☆☆可持久化线段树+最大流

bzoj1565 植物大战僵尸      拓扑排序+最小割

题意:

给定一个m*n的草坪,每块草坪上的植物有两个属性:

1.啃掉这个植物,获得收益x(可正可负)

2.保护(r,c)点的植物不被啃掉

任何一个点的植物存活时,它左侧的所有植物都无法被攻击

求最大收益

bzoj1834 network 网络扩容    最大流+费用流

题意:

给定一张有向图,每条边都有一个容量C和一个扩容费用W。这里扩容费用是指将容量扩大1所需的费用。

求:

1、在不扩容的情况下,1到N的最大流;

2、将1到N的最大流增加K所需的最小扩容费用。

bzoj1061 志愿者招募     ☆☆☆奇怪变形+费用流

题意:

这个项目需要N 天才能完成,其中第i 天至少需要Ai 人。一共有M 类志愿者可以招募。其中第i 类可以从第Si天工作到第Ti天,招募费用是每人Ci元。求最少的费用。

bzoj3876 支线剧情        上下界费用流

题意:

给定一张拓扑图,每条边有边权,每次只能从第一个点出发沿着拓扑图走一条路径,求遍历所有边所需要的最小边权和

bzoj1221 软件开发         费用流

N 天第i天需要ri块餐巾。餐厅可以购买新的餐巾,每块餐巾的费用为p分;或者把旧餐巾送到快洗部,洗一块需m天,其费用为f 分;或者送到慢洗部,洗一块需n 天(n>m),其费用为s<f 分。每天结束时,餐厅必须决定将多少块脏的餐巾送到快洗部,多少块餐巾送到慢洗部,以及多少块保存起来延期送洗。但是每天洗好的餐巾和购买的新餐巾数之和,要满足当天的需求量。求最小花费。

bzoj3158 && 3275 千钧一发    最小割

题意:

有N个正整数,需要从中选出一些数,使这些数的和最大。

若两个数a,b同时满足以下条件,则a,b不能同时被选

1:存在正整数C,使a2+b2=c2

2:gcd(a,b)=1

bzoj3698 XWW的难题      上下界最大流

题意:

XWW给你一个N*N的正实数矩阵A,满足XWW性:

①A[N][N]=0;②矩阵中每行的最后一个元素等于该行前N-1个数的和;③矩阵中每列的最后一个元素等于该列前N-1个数的和。

现在你要给A中的数进行取整操作(可以是上取整或者下取整),使得最后的A矩阵仍然满足XWW性。同时XWW还要求A中的元素之和尽量大。

bzoj4514 数字配对        二分图+费用流

题意:

有 n 种数字,第 i 种数字是 ai、有 bi 个,权值是 ci。

若两个数字 ai、aj 满足,ai 是 aj 的倍数,且 aiaj 是一个质数,那么这两个数字可以配对,并获得 ci×cj 的价值。一个数字只能参与一次配对,可以不参与配对。在获得的价值总和不小于 0 的前提下,求最多进行多少次配对。

bzoj2561 最小生成树       两波最小割

题意:

给定一个边带正权的连通无向图,假设现在加入一条边权为L的边(u,v),那么需要删掉最少多少条边,才能够使得这条边既可能出现在最小生成树上,也可能出现在最大生成树上?

bzoj3996 线性代数        最小割

题意:

给出一个N∗N的矩阵B和一个1∗N的矩阵C。求出一个1∗N的0、1矩阵A.使得D=(A∗B−C)∗AT最大。输出D 

bzoj1066 蜥蜴          最大流

bzoj1305 dance跳舞       二分+最大流

题意:

一次舞会有n个男孩和n个女孩。每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞。每个男孩都不会和同一个女孩跳两首(或更多)舞曲。有一些男孩女孩相互喜欢,而其他相互不喜欢(不会“单向喜欢”)。每个男孩最多只愿意和k个不喜欢的女孩跳舞,而每个女孩也最多只愿意和k个不喜欢的男孩跳舞。给出每对男孩女孩是否相互喜欢的信息,舞会最多能有几首舞曲?

bzoj1532 Kos-Dicing       二分+最大流

题意:

n个人,给出m场比赛,求出胜出的人最少赢的场次。

bzoj2502 清理雪道        上下界最小流

题意:

给定一张拓扑图,求最少的链(可重复)使之覆盖所有的边

bzoj2150 部落战争        二分图+最小路径覆盖

题意:

给出一张地图,一个军队要征战整个土地。一块土地只能经过一次,有X的地方不能走,军队只会走R*C个格子,只会向下走,问最少需要多少军队能够征战所有的土地。

bzoj1458  士兵占领        最大流,行列二分图

题意:

有一个M * N的棋盘,有的格子是障碍。现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵。我们称这些士兵占领了整个棋盘当满足第i行至少放置了Li个士兵, 第j列至少放置了Cj个士兵。现在你的任务是要求使用最少个数的士兵来占领整个棋盘。

bzoj1283&3550 序列         ☆☆☆费用流

题意:

给定一个长度为n的序列,要求选一些数,使得任意一个长度为m个区间中最多选k个数,求最大的和

bzoj1976 能量魔方 Cube      最小割

题意:

给出一个N×N×N的矩阵,矩阵上的每一个方块可以涂上两种颜色,相邻的两个方块如果涂上了不同的颜色,就会产生一点能量。现在已知了一些方块的颜色,问最多可以产生多少点能量。

bzoj2132 圈地计划        二分图

题意:

给定一个m*n的矩阵,每个位置如果作为商业区或者工业区各有一个收益,如果相邻两块是不同的也会有一个收益,求最大收益.

bzoj2768&1934 冠军调查     最小割

题意:

给出一个无向图,每个点有一个值0或者1。现在重新设置每个点的值0或者1。设重新设置后的点与原来的点有x个点的值不一样;重新设置后有y条边(u,v)使得u和v的值不同。最小化x+y。

bzoj3130  费用流        二分+最大流

题目大意:

一个图,Alice来弄一出一种最大流,Bob来给Alice弄好的最大流定权值。定权值的方法是给没条边定一个值wi,然后wi*flow(i)的和就是总的费用,但要求所有wi之和为p。现在Bob希望最后的费用最大,即对于每一种最大流方案都会有一种最大的定值方案。Alice则希望花费最小,即选出一种最大流方案,使得这种方案的最大定值是所有最大流方案中最小的。求最大流,及这个最小的最大定值。

bzoj1070 修车          费用流

题意:

有m个技术人员n辆车,一个技术人员只能同时修一辆车,每个技术人员修某一辆车都有特定的时间。求最小的等待时间。

bzoj1927 星际竞速        另类拆点+最小费用最大流

题意:

一个图n个点。对于给出的每条边u−>v , 边权为w , 且u<v,另外有n个值ai,表示从任何一个点到达i点的时间为ai。一开始你在n个点之外的一个点上称其为B。要求从B出发,遍历n个点各一次,求最小时间。显然开始你只能使用ai从B到达n个点中的某个点,因为B到n个点中没有其他的边。

bzoj1822 Frozen Nova 冷冻波      几何+最大流判断

题意

bzoj2229 最小割           分治搞最小割树

题意:

给定一个图,多次询问有多少个点对之间的最小割小于等于某个值

bzoj2893 征服王         缩点+上下界最小流/最大费用最大流

题意:

一个有向图,给定一些起点和一些终点。从这些起点开始到终点有很多路径(到了终点不一定要停,但只能到终点才能停),求要最少多少条路劲才能覆盖所有点。

bzoj2007 [Noi2010]海拔       ☆☆☆☆

题意:给出一个城市(网格图)各个道路的双向流量,城市的左上角的高度是0,城市的右下角的高度是1,若人走升高海拔就会消耗体力,问最小需要消耗多少体力。(海拔自己定,显然只能为0/1)

bzoj3504 危桥            跑两波最大流

题意:

一个无向图,节点编号为0到N-1。其中一些边最多只能通行两次,其他边能通过无数次。询问能否在s1和t1之间往返n次。同时,s2和t2之间往返m次。

bzoj3396最大流模版题

bzoj3955 Surely You Congest     spfa+多次最大流

题意:



求在没有堵塞的情况下最多有多少乘客能够抵达市中心。

bzoj2539 丘比特的烦恼    KM匹配或最大费用最大流(模板)

题意:

带权二分图的最佳匹配

bzoj4519 不同的最小割       最小割树

题意:

求在图中选任意两个点作为源汇跑最大流有多少个不同的值

bzoj1711 Dingin吃饭        拆点傻题

bzoj3438 小M的作物        最大权闭合图/最小割★

题意:

给定一些元素,需要放在两个集合里,每个元素放在集合A里的贡献为ai,放在集合B里的贡献为bi。其中还有一些子集,若一个子集的所有元素都在A集合里会获得贡献值c1i,都放在B集合里会获得贡献值c2i

bzoj1059 矩阵游戏         二分图匹配

题意:

是否可以找出n个点使得两两不同行且两两不同列

bzoj1449&&2895 球队收益     最小费用最大流(事件依赖)(增量法)

题意:

有n支球队,第i支球队的赛季总支出是Ci∗x2+Di∗y2,Di≤Ci。其中x,y分别表示这只球队本赛季的胜负场次。现在每只球队分别取得了ai场胜利和bi场失利。而接下来还有m场比赛要进行。问联盟球队的最小总支出是多少。

bzoj2285看不懂题系列

bzoj4276 Bajtman i * Robin     线段树优化费用流

题意:

n≤5000个区间l,r≤5000,每个区间可以选一个点得到val[i]的价值,每个点最多选1次,求最大价值

bzoj3894 文理分科         最小割(事件依赖)

题意:

给定一个m*n的矩阵,每个格子的人可以学文或者学理,学文和学理各有一个满意度,如果以某人为中心的十字内所有人都学文或者学理还会得到一个额外满意度,求最大满意度之和

bzoj2406 矩阵           二分图+上下界可行流判断



bzoj1189 紧急疏散evacuate     Floyd+二分+最大流

题意:

给出一个n*m的矩形,每个格点上有一个人,边界上有一些门,一个人一个单位时间能移动到相邻的格,每个单位时间一个门能出一个人。问所有出去的最短时间

bzoj1191 超级英雄Hero       二分图最大匹配

题意:

给定n个锦囊和m个问题,每个问题可以使用给定的两个锦囊之一,必须连续答题,求最多答上多少题

bzoj1266 上学路线route       Floyd+最小割

题意:

给定一张图,每条边有一个长度和一个花费,要求删掉一些边使1到n的最短路变长,求最小花销

bzoj1324 Exca王者之剑       黑白染色二分图+最小割

题意:

给定一个n*m的矩阵,每个格子有宝石,人任选位置出发,取走当前位置的宝石之后四周的宝石消失,然后可以走两步,重复上述过程

bzoj3175 攻击装置         二分图最大独立集

题意:

给定一个n*n的网格图中有0/1,要在0的位置上放置一些攻击装置,其中一个攻击装置的攻击范围是周围8个“日”字形区域,要求不能互相攻击,求最多放置多少个攻击装置

bzoj1562 [NOI2009]变换序列    ☆☆☆

题意:

有一个长为n的序列A,对于任意的Ai,1≤i≤n,1≤Ai≤n,且对于任意的1≤i,j≤n,i!=j,Ai!=Aj。对其中每个元素进行加di mod n或者是减di加n后mod n的操作后,变成一个新的序列T,要你判断这样的T是否存在,以及最小字典序的T。

bzoj2095 Bridges          二分+欧拉回路判断

题意:

给定一张图,每条边的两个方向有两个不同的权值,现在要求从1号节点出发遍历每条边一次且仅一次,最后回到1号节点,求最大边权的最小值

bzoj3511 土地划分         最小割(事件依赖)

题意:

给出n个点m条边,并设定:

点x在被划分至集合A时获得权值A[x],否则即被划分至集合B并获得权值B[x];

边(x,y)连接的x和y均属于集合A时获得权值ea,均属于集合B时获得权值eb,否则获得权值-ec。

bzoj1570 Blue Mary的旅行     分层图最大流(难想)

题意:

给定一张有向图,每条边每天最多经过有限次,一个人每天只能经过一条边,T个人从1号点出发,问多少天之后能到达n点

bzoj4443 小凸玩矩阵        二分+二分图最大流

题意:

一个N*M(N<=M)的矩阵A,要求从其中选出N个数,其中任意两个数字不能在同一行或同一列,现选出来的N个数中第K大的数字的最小值是多少。

bzoj2521 最小生成树        最小割

题意:

一个带权图(连通),每次可以将某条边+1。操作后要使得某条钦定的边在最小生成树上。问最少要操作多少次

bzoj3681 Arietta          合并可持久化线段树+网络流

题意:

所有的 n 个音符形成一棵由音符 C ( 1 号节点) 构成的有根树,每一个音符有一个音高Hi 。

Arietta 有 m 个力度,第 i 个力度能弹出 Di 节点的子树中,音高在 [Li,Ri] 中的任意一个音符。

为了乐曲的和谐,Arietta 最多会弹奏第 i 个力度 Ti 次。

Arietta 想知道她最多能弹出多少个音符。

bzoj3532 Lis            最小割+网络流贪心退流

题意:

给定序列A,序列A中的每一项Ai有删除代价Bi和附加属性Ci。请删除若干项,使得序列A的最长上升子序列长度减少至少1,且付出的代价之和最小,并输出方案。如果有多种方案,请输出将删去项的附加属性排序之后,字典序最小的一种。

bzoj1391 order           最小割

题意:

有n个有偿工作选做,m个机器,完成一个工作需要若干个工序,完成每个工序需要一个机器,对于一个机器,在不同的工序有不同的租费,但买下来的费用只有一个。问最大获益。

bzoj4205

bzoj1340 Escape逃跑问题       最小割

题意:



bzoj2929 洞穴攀行          最大流裸题

题意:

和1、n相连的边容量为1,其余的是INF,求最大流。

bzoj1143&&2718 祭祀        floyd+匈牙利

题意:

求有向图的最长反链

bzoj2055 80人环游世界      上下界最小费用最大流

题意:

给定n个点,每个点有固定的经过次数,m个人从任意节点出发任意节点结束,只能向右走,要求总边权和最小有源汇、有上下界的费用流。

bzoj1412 狼和羊的故事         最小割

bzoj1433 假期的宿舍          最大流

bzoj4108 Catering        上下界最小费用最大流

与bzoj2055类似(弱化版)

bzoj4200 小园丁与老司机        ☆☆☆☆

bzoj2756 奇怪的游戏       二分+最大流

题意:

一个 N*M 的棋盘上玩,每个格子有一个数。每次选择两个相邻的格子,并使这两个数都加上 1。最少多少次能使棋盘上的数都变成同一个数,如果永远不能变成同一个数则输出-1。

bzoj2127 happiness       最小割(事件依赖)

文理分科弱化版

bzoj1797 Mincut 最小割     网络流+tarjan

题意:

问题一:是否存在一个最小代价路径切断方案,其中该道路被切断?

问题二:是否对任何一个最小代价路径切断方案,都有该道路被切断?

bzoj1497最小割

bzoj2400拆位+最小割

bzoj1854

bzoj1001网络流转平面图->对偶图,求解最短路

bzoj2744二分图匹配

题意:

集合A中。若a[x] xor a[y] mod 2==0则x与y连边

集合B中。若a[x] xor a[y] mod 2==1或a[x] or a[y]在二进制下有奇数位为1则x与y连边

集合A与集合B之间有些点有连边

求图中的最大团点数。

分析:

集合A中的连边是二分图,二分图最大团最多为2

∵最大团=补图的最大独立集=点数-最大匹配数

集合B中的连边的补集是二分图(补图中偶数互不连边,奇数互不连边)

那么直接枚举集合A中可能的0、1、2个数的所有情况。那么集合B中能选的点一定与集合A中选出的点都有连边。跑一波最大匹配就好了。

bzoj4435最小割+hash

由于每个点的出度只有3,也就是说最小割最大为3。

可以考虑hash,hash[x][flow]表示在分治过程中x与当前vs之间的最小割为flow的累加值

//核心代码
void gao(int l,int r){
.....
//分治过程中搞到当前流量为res
for (int i=1;i<=n;i++)
if (!v[i]) hsh[i][res]+=bas;
//当前vs的v[vs]为1(即vs与i分别在两个集合)
.....
}
//计算答案
for (int i=1;i<=n;i++)
for (int j=i+1;j<=n;j++){
for (int k=0;k<=3;k++)
if (hsh[i][k]!=hsh[j][k]){
ans+=k;break;
}
}


bzoj3144 切糕        最小割

题目大意:给出一个三维的点阵,没个点都有可能被切割,代价就是这个点的权值。相邻的切割点的高度差不能超过D,问最小的花费使得上下分开。

zoj3229

题意:

一个屌丝给m个女神拍照,计划拍照n天,每一天屌丝给给定的C个女神拍照,每天拍照数不能超过D张,而且给每个女神i拍照有数量限制[li,ri],对于每个女神n天的拍照总和不能少于Gi,如果有解求屌丝最多能拍多少张照,并求每天给对应女神拍多少张照;否则输出-1。

分析:上下界最大流。

根据题目建图:

一天一个点,一个女神一个点。

源点向第x天连[0,Dx]的边

第x个女神向汇点连[Gi,inf]的边

第x天向给定的Cx个女神连[li,ri]的边

zoj2314

题意:

给n个点,及m根pipe,每根pipe用来流躺液体的,单向的,每时每刻每根pipe流进来的物质要等于流出去的物质,要使得m条pipe组成一个循环体,里面流躺物质。

并且满足每根pipe一定的流量限制,范围为[Li,Ri].即要满足每时刻流进来的不能超过Ri(最大流问题),同时最小不能低于Li。

分析:上下界可行流模板

zoj2676 0/1分数规划

题意:给出一个带权无向图,每条边有一个边权wi,求将S和T分开的一个割边集C,使得该割边集的平均边权最小,即最小化∑wi|C| 。

zoj3362

题意:有N个城市以及连接这些城市的M条无向边,其中城市1是啤酒产地。给出N-1个数字,分别表示每个城市里啤酒每桶的价格(城市1不算),我们可以认为这N-1个城市对啤酒的需求是没有限制的即 无限大。

已知每条无向边最多可以运送啤酒的桶数 和运送每桶的花销,问你从城市1出发卖啤酒可以得到的最大收益。

zoj2532

题意: 有你个城市和m个中转站,有一个数据接收站(编号为0),城市从1—n编号,中转站从n+1—m编号,数据从每个城市发出最后到接收站接受,现在问提高哪些边中一条的容量使得接收站接收的数据增加

zoj2071

题意:

有m个订单,每个订单都能获取一定的收益,但是完成每个订单都需要购买不同的机器,求最多能挣多少钱,需要完成哪些订单,购买哪些机器。

zoj2539

题意:给出一个R*C的矩阵,定义n=R*C。

把矩阵转化成数组p[],则矩阵中元素Map[i][j] 在p[]中下标是(i-1) * C+j。

1,xi(1 <= i <=n)的值为0或1;

2,已经给出v0和v1,

3,j 属于N(i)——表示j是i在矩阵中邻近的元素(上、下、左、右)。

现在让你求函数E的最小值。

zoj3508

题意:给出士兵能够拿武器的重量最大值和最小值,再给出一些武器的重量,求最多能拿武器的数量。

zoj1994

zoj3792

zoj2760

zoj3348

zoj1760

zoj2532

zoj2874

zoj1734

hdu3313

hdu3338

hdu3998

hdu4067

hdu3605

hdu2883

poj3155

poj3801

poj2396

cf739D

cf704D

cf498C

cf589F

cf653D

cf434D

cf546X

ACdream1103

cf 200 div1 E  最小割树

题意:

给定一张无向图。求一个所有点的排列,使得排列中相邻的两个点之间的最大流和最大。

分析:

用分治弄出最小割表。最优排列的答案就是最小割树上的边权之和。(每次用一头一尾作为随便选的那两个点)

求可行解:因为在当前块中权最小的边一定只经过一次。这样每次都会把原图割成两个块(根据 每个点与头节点之间的最大流 与 当前块中最小割边比大小(就像分治建图,但为的是要弄同一个最小割树))

xsy2115与bzoj1061类似

xsy2023二分图匹配+tarjan

给出一个二分图,判断钦定一对匹配后存不存在完备匹配。

先跑一波最大匹配,想要改变原匹配中的一对匹配必须要从一点出发走(匹配边—->不匹配边—->匹配边—->不匹配边)之后走回来。

就是一个环。用tarjan求一波强联通分量,再判断一对点是否是原本的匹配边或者是在一个环内。

xsy2175一个最小割的趣题

给出任意两个点的最小割(n2个)求原图是什么,

显然是一棵最小割树,跑一波最大生成树判断一下就没了。

xsy2164最大权闭合子图

题意:

给出两棵树,点的编号相同并且有权值(可正可负)。

求一点集权值和的最大值,满足这些点在两棵树中都是联通的。

分析:

枚举根节点1~n,分别从根节点遍历两棵树。

这时我们发现假如一个点在点集中,那么它的父亲也一定在点集中。

就是最大权闭合子图啦~(儿子向父亲连有向边(建图))

xsy1887最小费用最大流(与餐巾纸类似)

xsy2290

题意:

有一台n(最多两质因子)片扇叶的风扇掉了k片扇叶。问最少再拆掉几片才能使它的重心回到转轴上并输出是哪几片。

分析:



yy的题:

1.最小割树

题意:给定一张平面图,平面图中每条边都有一个非负的权。求权值总和最小的环。

分析:弄出平面图的对偶图,那么对偶图中的一个割就对应平面图中的一个环

模型

1.最大权闭合子图





简单割:与源点、汇点相连的边。

最小割就是简单割,所以跑一波最大流就好了。

2.对于一个动态的图(可删边可加边):

如果每次新建整个图,显然可能会爆炸。

注意要用cap[]方便清空流量。

那么我们将要删的边的流量设为0。

在每次新加边的时候用t[]记录当前的h[]

这样每次删边就不用重新建图啦。

3.两个点只能选一个:

vs—-对应贡献—->x—-inf—->y—-对应贡献—->vt

4.对与最小割:

可以将流量设为inf来表示某条边不可割

一般来说都是转化成最小割,割完以后和S相连的是要选取的(对应到本题就是要雇佣的),和T相连的是不选取的,然后割表示损失的部分。

5.流量不能大于某个数:

二分搞一波

6.有某些性质使得有一陀点两两不能连边:

二分图

7.若一个点只能经过一次

拆点。拆点后又有权值,显然是费用流

8.有依赖关系

建图方法:

最小割:将事件搞成一个点,与事件有关的所有点连向事件点;事件点连向汇点。

在任意带权有向图中,只要有依赖关系需要解决,最大权闭合图都普遍适用。(普适性)

某大神的总结

以下是摘录和相关联想:

网络流建模主要分为两类:直接用最大流建模、用最大流—最小割定理转化为最小割来建模。

一、直接用最大流建模

(1)增广路思想:

应用范围较小,但是确实有一些模型用增广路思想很容易解释,用流量平衡思想却很难解释。

增广路思想可以概括为:原题的方案的得出可以很明显地分为一些阶段,每一阶段都会对一些变量(这些变量可能是实的也可能是虚设的)产生同样的效果值累加,而这些变量恰好有各自的限制,且互不关联。这刚好相当于网络中的一条从源点到汇点的一条增广路,对路上所有边的流量都会增加,且流量有各自限制(容量),且互不关联。并且,该模型满足下面(3)中的两条原则(可行性原则和最优性原则)。在比较多的时候,用增广路思想能够解释的模型往往是一个很明显的“物质路径”模型,某一种物质(可以是实的也可以是虚的)从源点往汇点“走”,边上的流量代表物质经过的量。

(2)流量平衡思想:

这个思想的应用非常广,可以解释绝大多数网络流模型。

所谓流量平衡,就是指在一个可行流里,除了源点和汇点外,其余每个点的入边流量总和都等于出边流量总和。可以证明,一个流是可行流当且仅当其:(1)每条边的流量都不超过容量限制;(2)符合流量平衡。

流量平衡思想的主要用处是:可以把图中的每条边的流量(当然必须是非负的)都想像为一个变量的值,对于每个点,满足流量平衡,也就是一些变量的和值满足某种等量关系,如果这些等量关系刚好能够反映题目中的所有信息,边的容量限制也反映题目中的条件,且这个模型符合“两条原则”,则该模型就是正确的了。在建模的时候,应先单独考虑各个点,找到它们的所有入边和出边代表的变量是什么,然后再将这些边合并,构成图。

在用流量平衡建模时有一些技巧:

<1>要注意每条边都同时作为一个点的出边和一个点的入边,因此,每个变量必然同时关联两个等量关系,且分别出现在这两个等量关系的等号的左边和右边(或者是以一对相反数形式出现);

<2>如果题目中给出的变量和值关系不是等量关系,而是不等关系,那么可以将剩余的流量通过从源点或往汇点连边的办法,使其平衡。比如,若题目中有y1+y2>=x1+x2>=y1+y2-5这样的关系,则可以这样做:设置一个点,将y1、y2代表的边作为该点的入边,将x1、x2代表的边作为该点的出边,然后从该点往汇点连一条容量为5的边;

<3>如果点内部有限制(比如某个点自身的权值不能超过X等等),那么该点内部也“暗含”一个变量,此时就需要拆点(不一定拆成两个点,可能拆成更多的点),然后在拆出的点当中再连边,附加一些限制,然后再考虑流量平衡;

<4>如果一条边有上下界,且上下界相等(也就是该边的流量已经定死了),则可以改装成费用流,将这条边的费用设为一个绝对值很大的负数,这样就肯定能保证该边满流了。

(3)判定网络流模型是否正确的两个原则:

<1>可行性原则:原题中的每一种可行方案,在建立的网络流模型中都对应着一个“能求出的”流(一般是满足一定的条件的流,比如某些边必须满流等),注意这里的对应必须是“一一对应”,就是,既不能有可行方案丢失,也不能出现不可行方案;

<2>最优性原则:原题中的最优方案(准确来说是最优方案的结果),在建立的网络流模型中都对应着一个“能求出的”量(最大流量或者满足最大流量的前提下的最小费用),也就是,最优结果必须是可以通过这个模型求出的。

一个网络流模型正确,当且仅当其符合以上两条原则。

上下界网络流

一、无源无汇可行流

问题描述:

给出一个有向无环图,每条边的容量有上界和下界,问是否存在可行流。

分析:

这个问题是无源无汇的。我们加一个超级源和一个超级汇,再搞些约束或许能行

这个问题它多了一个下界,也就是说一些边有一定的必须流的流量。我们通过某些手段将下界去掉就变成傻题了。

所以我们考虑将下界流量附加到图中。

对于一条上界为r,下界为l的边,则r-l为自由流。

我们对每个点进行分析:

进来的下界流+进来的自由流=出去的下界流+出去的自由流

进来的下界流-出去的下界流=-(进来的自由流-出去的自由流)

设 进来的下界流-出去的下界流=M

则 进来的自由流 比 出去的自由流 少 M

如果M>0 我们人为地将 该点向超级汇连一条容量为 M 的边

如果M<0 我们人为地将 超级源向该点连一条容量为|M|的边

分析建图的可行性:

问题求的是可行流,也就是说我们不需要知道它具体是怎么流的,只要知道它能不能符合条件。

所以说这就像一个黑箱问题,将除源点和汇点外的点扔进黑箱中。

首先我们新加的边已经使图理论上是可行流了(每个点的流入和流出是相等的)

所以假如存在可行流,那么我们从源点新加的边必定流满。

于是我们可以高兴得从超级源向超级汇跑一波最大流,

再判断我们从源点新加的边是否满流就好了。

二、有源有汇的最大流



问题描述:

给出一个有向无环图,每条边的容量有上界和下界,求1到n的最大流。

分析:

显然我们应先判断该图有没有可行流。

就是第一个问题了。第一个问题中的建图仅仅是将我们新加的边流满,但没有对原图中的边流满。

所以原图中依旧有边没有满流,即有路径可以增广。

于是再从1向n跑一波最大流,统计流量就好啦。

三、有源有汇的最小流

问题描述:

给出一个有向无环图,每条边的容量有上界和下界,求1到n的最小流。

分析:

显然我们应先判断该图有没有可行流。

就是第一个问题了。第一个问题中已经流了一定的流量使得图中流量已经合法。

现在要最小化流量,于是记1到n反向弧的流量为x1

将n到1连的边删去,将超级源向外连的边删去,将连向超级汇的边删去。

将n作为源点,1作为汇点流得的最大流为x2

最小流就是x1−x2了。

四、最小费用最大流

以bzoj3876为例

题意:

给出一个n个点的拓扑图,每条边有一个权值;

现想从第一个点出发任意次,每次到任意一个点结束,且经过所有边至少一次;

求最小权值;

n<=300;

分析:

首先我们建出有上下界的费用流:

按原图连边:容量为[1~inf],费用为相应时间。

将除1以为的点向我们新建的汇点连边:容量为[0~该点出度],费用为0

现在我们考虑如何将下界去掉。

有一条x—>y,容量为[low,up],费用为cost

假如我们强行将从x到y下界去掉的话。

x就会盈余low的流量,y就会减少low的流量。

于是我们人为添加一个超级源点和一个超级汇点。

从x向y连边:容量up-low,费用为cost(自由流)

从超级源点向y连边:容量为low,费用为cost(满足y减少的流量)

ps:x所盈余的体现在下面的第2条建边中

对于每个点:

从x向原图源点连边:容量为inf,费用为0(将原图源点修改为当前x)

从x向超级汇点连边:容量为x的出度总和,费用为0(将x作为汇点(有多个汇总到超级汇))

二分图

定义:

最大匹配:顶点两两匹配,选取的边不能有共同顶点

最小边覆盖:选最少的边覆盖所有的顶点(边数)

最小点覆盖:选最少的点,使得任意边都有一端点被选

最大独立集:选出最多的点,任意两点之间没连边

最大团:选最多的点,任意两点之间都连边

最小路径覆盖:选最少的路径覆盖所有的边(路径数)

有向无环图中,有如下的一些定义和性质:

链:一条链是一些点的集合,链上任意两个点x, y,满足要么 x 能到达 y ,要么 y 能到达 x 。

反链:一条反链是一些点的集合,链上任意两个点x, y,满足 x 不能到达 y,且 y 也不能到达 x。

性质:

①最大匹配数+最小边覆盖数=顶点数(二分图)

②最大独立集(点集)+最小点覆盖(点集)=所有点(一般图)

③最大匹配数=最小点覆盖数(二分图)

④最小边覆盖数=最大独立集点数=顶点数-最大匹配数(二分图)

⑤最小路径覆盖数=点数-最大匹配数

⑥最大团=补图的最大独立集

⑦最长反链长度 = 最小链覆盖=路径可以相交的最小路径覆盖(有向无环图)

根据性质的相关求解方法:

性质①~⑥均可经过相互转换成:顶点数和最大匹配数之间的关系

性质⑦:

有向无环图最小不相交路径覆盖:

把原图中的每个点V拆成Vx和Vy,如果有一条有向边A->B,那么就加边Ax−>By。这样就得到了一个二分图,最小路径覆盖=原图的节点数-新图最大匹配

有向无环图最小可相交路径覆盖:

先floyd求出连通性后,最小不相交路径覆盖。

混合图欧拉回路

预备知识

1、欧拉回路是图G中的一个回路,经过每条边有且仅一次,称该回路为欧拉回路。具有欧拉回路的图称为欧拉图,简称E图。

2、 无向图中存在欧拉回路的条件:每个点的度数均为偶数。

3、有向图中存在欧拉回路的条件:每个点的入度 = 出度。

4、欧拉路径比欧拉回路要求少一点:无向图中存在欧拉路径的条件:每个点的度数均为偶数或者有且仅有2个度数为奇数的点。

5、有向图中存在欧拉路径的条件:除了2个点外,其余的点入度=出度,且在这2个点中,一个点的入度比出度大1,另一个出度比入度大1。

6、欧拉路径的输出:经典的套圈算法。

一般图欧拉回路

对于欧拉回路,有一个基本的算法:

对于无向图,每个点的度都是偶数,则图中有欧拉回路存在;

对于有向图,只要每个点的出度等于入度,则图中有欧拉回路存在。

混合图欧拉回路

1、随意定向

在混合图中,对于双向边的处理除了拆边之外,还有任意定向。先对全图的双向边进行任意定向,接着使用上文的欧拉回路算法,很显然,无法得到结果。但是通过这一步,至少可以确定这样一件事实,如果一个点的出度加入度一定是奇数的话,那么这个图一定没有欧拉回路。

而随意定向是没有依据的,但是可以使用这样的随机化处理方法,再使用恰当的调整方法构造出解。

2、自调整方法

所谓的自调整方法就是将其中的一些边的方向调整回来,使所有的点的出度等于入度。但是有一条边的方向改变后,可能会改变一个点的出度的同时改变另一个点的入度,相当于一条边制约着两个点。同时有些点的出度大于入度,迫切希望它的某些点出边转向;而有些点的入度大于出度,迫切希望它的某些入边转向。这两条边虽然需求不同,但是他们之间往往一条边转向就能同时满足二者。

具体步骤:

1.为任意一条无向边选择一个方向。如果存在欧拉回路的话,那么可以得到每个点入度于出度差至少应满足为偶数。否则一定不能够构成欧拉回路。

2.在满足上述条件的基础上,我们需要对我们假定的边进行修正,如果最后能够修正成所有点的入度等于出度那么就能够得出这个混合图的欧拉回路(通过正确的化无向边为有向边)。如何修正呢,这时就可以转化为网络流问题求解:

可以定义:

入度大于出度的节点需要流出一些流量。

出度大于入度的节点需要接收一些流量。

然后建立超级源点和超级汇点保持流平衡即可。

具体这样建二分图:



设置源点S,向所有出度>入度的点连边。

设置汇点T,向所有入度>出度的点连边。

流量均为|入度−出度|2



遍历边<i,j> 若假定 i,j 之间连接了mp[i][j] 条无向边(一开始的定向为i—>j),那么连接一条从 j 到 i 流量为mp[i][j]的边。为什么反过来,因为这是我们假设的,意味着我们有多少反悔的资本。

可以发现,从源点S出发的一个单位流将会经原图中的一条无向边,使得两端的点(出度>入度的:出度-1。出度<入度的:入度+1),其实这就是在模拟一次对无向边方向的调整。当把图建好后,依靠最大流性质可以最大可能地无冲突调整边的方向,并最终使得每个点的点容量都达到满流。

最后,还要对那些图中出度等于入度的点做适当分析,它们作为一个“中间点”,由于流平衡性质,不会留下任何流量值,对于那些真正需要调整的点不会带来任何影响。

最后,如何得到答案?那就是检查从源点出发的每条边是否都满流,如果有一条边没有满流,说明有一个点没有调整到入度等于出度,于是整个图不存在欧拉回路。

最小割树

分治+最大流





某些用线段树优化的题

bzoj3218

bozj4276

bzoj3681

它们之间都有共通点,就是对某段连续的区间加边,那么就可能可以用线段树优化。

注意到线段树每一个节点就代表一段连续的区间,这样对某一段区间的点加边就可以变成对线段树上的某些点加边了。

边数就一下从n2变成了nlogn

平面图&对偶图

题目一般会给出网格图,将源点和汇点连接,搞多一个平面就好了。

大神
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息