关于模型
-
傻逼型
看一眼解决问题
-
拆点模型
要限制某个点的流量或者一个点在多个条件下往往需要用到,其他模型多与混合
- 限流型
限制点只能选/经过次
- 满足多个条件型
满足条件流量为,满足条件流量为,……
-
取数模型
常见的费用流模型
一个位置最多能取次数,最多经过次,用到了拆点
-
黑白染色模型
常用于最小割棋盘类
对于格子,选择ta之后就不能选择格子,奇数点染成黑色,偶数点染成白色,连黑色格子,白色格子连跑最小割
解决某些适用于所有/指定格子且互不影响的条件
-
染色模型
黑白染色的拓展,有多个限制分类讨论,颜色之间再相连
-
二分流量模型
常用于一些满足某种条件的最大/小值问题
二分一个流量,使得所有边的流量对二分值取,看是否满足总流量/费用条件(是否合法)
-
士兵占领模型
解决行列问题,当满足第行至少放置了个士兵, 第列至少放置了个士兵,整个棋盘就全部被占领,问最少需要士兵数
-
泡泡堂模型
士兵占领模型的变种,可以占领两个阻碍之间的区域
把对于行的所有区域和对于列的所有区域单独处理,然后连接
-
消毒模型
士兵占领模型的变种,每次可以花费占领一行或一列,占领的区域可以有重叠,问占领给定区域最小花费数
相当于一个最小点覆盖
-
电驴模型
每个点只能按某种顺序到达一次,点可以通过连边到达点或者某种通用方式到达点,通用方式不受出发点影响
与连两条边,一条表示通用方式到达,一种表示为出发点;同时每个点都与相连,表示总流量为,也是拆点的应用
-
餐巾模型
类似于电驴模型,最大的特点是流量不固定(有多余流量)和上一个点可以影响下一个点
单独考虑每一天,每一天可以从新进流量(买餐巾),也可以从前面天进流量(洗好的),所以就相当于电驴模型的操作了
因为流量可以从上一天传递下来,所以上一天与下一天连边
-
交换棋子模型
可以构成某条路径,路径中间是一个流量,头尾单独讨论
对于路径,将一个点拆成个点,,中间点流量都为
-
切糕模型
相邻点之间有距离限制,需要转换成单向限制
关于其他
-
最小顶点覆盖
选择点就相当于覆盖与点相连的边,求最少选多少个点能把整个图覆盖
等于求二分图的最大匹配,跑最大流即可
-
最大独立集
选出一些顶点使得这些顶点两两不相邻,则这些点构成的集合称为独立集,包含顶点数最多的独立集称为最大独立集
发现把最小顶点覆盖求出的点去掉,整个二分图是不连通的
所以
-
最小路径覆盖(不相交)
选择不能相交的路径,求最少选多少条路径覆盖所有边
拆点建新图,则
对于有向边,新图中对应建,每匹配一对点,相当于选一条边将ta们合并起来
-
最小路径覆盖(可相交)
选择可以相交的路径,求最少选多少条路径覆盖所有边
用(传递闭包)求出每两点之间的连通关系,对于连通的两个点(原图中不一定直接相连),相当于ta们之间存在一条有向边(原图中不一定存在),然后就是不相交的做法了
-
最长反链
反链指一个点集中的点两两不到达,最长反链指最大的这样的点集
有定理为:
-
最小割树
对于一个无向图,每次从一个集合里选择两个点,求出之间的最小割,然后在新图里建连边,重复上面过程
最后新图里面必定是棵树,且某两个节点之间的最小割为ta们树上路径的最小边的权值
可以用分治来搞