这东西的抽象就是多层抽象导致概念名称脱离了自然语言导致的,虽然是必要的,但是这意味着专业人士会基本不加解释的使用这些词语,而完全门外汉要理解它需要复数份资料、解释。
点双、连通、分量、割点……
点双通常用来简称“点双联通分量”,连通不解释,分量通常指极大子图,割点也不解释。
点双不能通过删掉一个点使图变为双连通,每两个点都至少属于一个环。
任意两点间都有简单路径,且路径的并包含所有点。
两点双至多有一个公共点,而单连通图可分割为点双。
圆方图
图的点用圆表示,而每求出一个点双,可以将点双中所有点连接到一个虚拟的方。
任意两点的连接就变成了通过点双的连接,经过点双的公共点(圆)进入新点双(方),再通过公共点(圆)……。
由于制圆方图将图的拓扑结构变为树(二维贝蒂数0),因此易于搜索了。
那个用来求割点的算法
祖先节点不解释。
任意确定节点有多个相邻节点时的优先顺序,并且使用的是深度优先搜索,而且每个父结点只有两个子结点。
nfs[]会用来存编号。
判断一个结点是割点,要求存在一个子结点不能回到祖先。
“返祖边”实在是一个太妙的说法,语文好对于其他人学知识是真有用。
不能返祖的子节点,其在图上相邻结点nfs一定不小于父结点,以该结点为根的子树上的结点却并不一定不能返祖。
将结点相邻结点的最小nfs,作为该结点能搜索到的较低nfs值,记入low[]。
神奇事情
如果脑子里稍微过一下这算法能发现很多纰漏、感觉有很多特殊情况。
为什么深度优先搜索构建树是个好方法,因为它生成的树把特殊情况都去除了,甚至还有其他一些神奇性质。
zcx
这个似乎是起源于Tarjan算法