前言
补了这个辣鸡算法吧..
仙人掌
定义:一张图中任意一条边最多只会出现在一个环中
DFS树的做法
对图进行dfs,记录dfs的编号形成一棵树
显然最后边会分为两类
树边和非树边
环一定是由一些树边和一条非树边构成的
对于仙人掌问题,可以考虑对dfs树进行dp
在遇到环的时候,把环单独拿出来考虑即可…
圆方树
为了解决大多数静态仙人掌问题,我们就引入了这个算法!
以下来自WC2017营员交流课件
仙人掌 G=(V,E) G = ( V , E ) 的圆方树 T=(VT,ET) T = ( V T , E T ) 为满足以下条件的无向图:
VT=RT∪ST,RT=V,RT∩ST=∅ V T = R T ∪ S T , R T = V , R T ∩ S T = ∅ ,我们称 RT R T 集合为圆点、 ST S T 集合为方点
∀e∈E ∀ e ∈ E ,若 e e 不在任何简单环中,则对于每个仙人掌中的简单环 R R ,存在方点 ,并且
∀p∈R ∀ p ∈ R 满 足 (pR,p)∈ET ( p R , p ) ∈ E T ,即对每个环建方点连所有点
如果不想看 可以看下面我说的..
把图中原有的所有点看成圆点
对于图中任意一个大于1的点双,我们新建一个方点,把这个点双中的所有点向这个方点连边
比如这张图就是个很好的栗子(来自营员交流课件..)
有一些性质
1:圆方树是一棵无根树
2:圆方树中方点不会跟方点连边
定义子仙人掌为:
定义:子仙人掌
以 r r 为根的仙人掌上的点的子仙人掌是去除掉 p p 到的所有简单路径后, p p <script type="math/tex" id="MathJax-Element-2420">p</script>所在的联通块
3:以r为根的仙人掌上p的子仙人掌即为以r为圆方树的根的p的子树中所有圆点
这时候我们可以把环上的信息保存在方点上
然后就很舒服地
dp!!!!!!!!!!