题目链接:
题意:
问一个连通的网络中有多少个关节点,这些关节点分别能把网络分成几部分
题解:
Tarjan 算法模板题
顺序遍历整个图,可以得到一棵生成树:
树边:可理解为在DFS过程中访问未访问节点时所经过的边,也称为父子边
回边:可理解为在DFS过程中遇到已访问节点时所经过的边,也称为返祖边、后向边
对根节点u,若其有两棵或两棵以上的子树,则该根结点u为割点;
对非叶子节点u(非根节点),若其子树的节点均没有指向u的祖先节点的回边,说明删除u之后,根结点与u的子树的节点不再连通;则节点u为割点。
// 当(u,v)为树边且low[v]>dfn[u]时,表示v节点只能通过该边(u,v)与u连通,那么(u,v)即为割边。
用一个数组保存每个节点的子树个数即可
代码:
#include<iostream>
#include<cstdio&g