一.最小树形图
1. 基础
定义
最小树形图,就是给有向带权图中指定一个特殊的点 $ root $ ,求一棵以 $ root $ 为根的有向生成树T,并且T中所有边的总权值最小。
2. 朱刘算法
复杂度 $ O(VE) $
算法流程
对固定根 $ root $ 进行一遍 $ DFS $ 判断是否存在最⼩小树形图。
为除了了 $ root $ 之外的每个顶点选定一条最小的入边(用 $ pre[u] $ 记录顶点 $ u $ 最小入边的起点)。
判断2中构造的⼊入边集合是否存在有向环,如果不不存在,那么这个集合就是该图的最
⼩小树形图。如果3中判断出现有向环,则消环缩点。设 $ (u,v,w) $ 表示从 $ u $ 到 $ v $ 的权为 $ w $的边。
假设3中判断出的有向环缩为新顶点 $ new $ ,若 $ u $ 位于环上,并设环中指向 $ u $ 的边权是 $ ω[u] $ 。
那么对于每条从u出发的边 $ (u,v,w) $ ,在新图中连接 $ (new,v,w) $ ,对于每条进⼊入u的边 $ (in,u,w) $ ,在新图中建⽴立边 $ (in,new,w-ω[u]) $ 。
新图⾥里里最⼩小树形图的权加上旧图中被收缩的环的权和,就是原图中最⼩小树形图的权值。重复2,3,4。
中判断⽆无有向环,返回权值。
3. 平面图
二.字符串
1. AC自动机
2. 后缀自动机
自动机:
构成:
$ alpha $ : 字符集
$ state $ : 状态集合
$ init $: 初始状态
$ end $ : 结束状态集合
$ trans $ : 状态转移函数
$ trans $ 函数
$ trans(s,ch) $ 表示当前状态是 $ S $ ,读入字符 $ ch $ 后的状态
$ trans(s,str) $ 表示当前状态是$ S $ ,读入字符串 $ str $ 后的状态
- 杂项
自动机A能识别的字符串就是所有使得 $ trans(init,x)∈end $ 的字符串x即为 $ Reg(A) $
从状态S开始可被识别的字符串集合记为 $ Reg(S) $
后缀自动机
定义
给定字符串 $ S $
$ S $的后缀自动机(SAM)是能够识别所有 $ S $ 的所有后缀的自动机
即 $ SAM(x)=True $ ,当且仅当 $ x $ 是 $ S $ 的后缀
最简单的实现
后缀树:将所有后缀插入trie中
$ O(n^2) $
太菜了最简状态后缀自动机
大小是线性的
假如我们得到了最简状态后缀自动机SAM
$ ST(str)=trans(init,str) $
令母串为S,他的后缀的集合为 $ Suf $ ,他的连续子串的集合为 $ Fac $
从位置 $ a $ 开始的后缀为 $ Suffix(a) $
$ S[l,r) $ 表示S中 $ [l,r) $ 区间构成的子串
下标从 $ 0 $ 开始
对于字符串 $ x $ ,若 $ x $ 不属于 $ Fac $ ,那么 $ ST(x)=null $
对于字符串 $ x $ ,若 $ x $ 属于 $ Fac $ ,那么 $ ST(x)!=null $