提示

dfs

 

删掉该边,影响图的连通性

桥判定法则:

x以外的任一结点,均不是y的祖先结点。

表示成代码:

 

 

 

 

割点

讲解

https://www.luogu.com.cn/blog/acking/solution-p3388

https://www.cnblogs.com/collectionne/p/6847240.html

 https://blog.csdn.net/weixin_45819197/article/details/109600168?utm_source=app&app_version=5.0.1&code=app_1562916241&uLinkId=usr1mkqgl919blen

https://www.luogu.com.cn/blog/taoran/solution-p3388  代码

只有F(i,1,n)里有一个小小的t=0

但那我也终于放心了,dfn的赋值

 

代码

dfn数组:dfs顺的时间戳

low数组:i结点不走dfs能回到的最远的祖先结点(远是以dfs起始结点为最远的根结点而言的)

即在结点i处,low记录的路径和dfs记录的路径合并以后,就形成了一条以i结点自身为起点和终点的完整的回路。

如图的2 5 1 2,2的dfs路径1 2是显然的,而根据low数组的记录,2可以回到祖先结点1,即有路径2 ... 1,故这就有一个回路经过2结点。

 而如果一个结点或者说一个连通块的代表性结点,只有dfs路径,即只有一条自上而下到达该结点的路径,却没有自下而上回到父结点以外的祖先结点去的路径,并且此时的父结点不是跟结点,即存在另一个连通块,那么此时的这个父结点就是割点了。

连通块这个概念的提出很好,其实就是递归,类比于树的定义。

 

 

割点是low[子]>=dfn[父]

而桥是low[子]>dfn[父]

图解

此时34单向连通,3是割点,34是桥。

而分析代码可知,此时

low[4]=4

low[3]=3

 

 

此时34双向连通,3是割点,但34不是桥。

分析代码可知,此时

low[4]=4

low[3]=3

因为没有if(i==father)的情况,还是被彻底跳过了,所以没有任何变化

 但是像4这样被切掉,就剩下一张图的,或许也不是割点??比较边界的情况了

 

复杂图片出处

https://www.cnblogs.com/c202202chenkelin/p/13910361.html

 

复杂图解读

dfs顺序

 

vis数组作用:

控制路径无环,即保证生成的路径是树

如果结点被访问过,则第二次访问时,比较是否是祖先结点

 

 

经过反复仔细的确认,我还是觉得书上这个代码漏了讨论i==father的情况

 

posted on 2022-03-04 08:39  Josee不是john  阅读(45)  评论(0)    收藏  举报