[模板] tarjan/联通分量/dfs树

边的分类

有向图边分为四类: 树边, 前向边, 返祖边(后向边), 横叉边.

上图:

判定

有向图

对图进行dfs, 不考虑已经遍历过的点, 得到dfs序 \(dfn_i\).

在dfs过程中, 记录当前dfs栈. 对于边\((u,v)\),

  • 树边: \(vis_v==0\);
  • 前向边: \(vis_v==1\)\(dfn_v > dfn_u\);
  • 返祖边: \(vis_v==1\)\(dfn_v < dfn_u\), 且 \(v\) 在当前栈内;
  • 横叉边: \(vis_v==1\)\(dfn_v < dfn_u\), 且 \(v\) 不在当前栈内.

无向图

边仅分为树边和返祖边, 通过 \(vis\) 判断即可.

猜你喜欢

转载自www.cnblogs.com/ubospica/p/10548822.html