边的分类
有向图边分为四类: 树边, 前向边, 返祖边(后向边), 横叉边.
上图:
判定
有向图
对图进行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\) 判断即可.