[学习笔记]tarjan求割边

时间:2021-08-06 17:00:21

上午打模拟赛的时候想出了第三题题解,可是我不会[学习笔记]tarjan求割边求割边只能暴力判割边了QAQ

所以,本文介绍[学习笔记]tarjan求割边求割边(又称桥).

[学习笔记]tarjan求割边的定义同[学习笔记]tarjan求割边求有向图强连通分量.

枚举当前点[学习笔记]tarjan求割边的所有邻接点[学习笔记]tarjan求割边:

1.如果某个邻接点[学习笔记]tarjan求割边未被访问过,则访问[学习笔记]tarjan求割边,并在回溯后更新[学习笔记]tarjan求割边

2.如果某个邻接点[学习笔记]tarjan求割边已被访问过,则更新[学习笔记]tarjan求割边

对于当前节点[学习笔记]tarjan求割边,如果邻接点中存在一点[学习笔记]tarjan求割边满足[学习笔记]tarjan求割边([学习笔记]tarjan求割边向上无法到达[学习笔记]tarjan求割边[学习笔记]tarjan求割边祖先)说明[学习笔记]tarjan求割边为一条割边.

inline void tarjan(int u,int fa){
dfn[u]=low[u]=++cnt;
for(int i=g[u];i;i=e[i].nxt)
if(!dfn[e[i].to]){
tarjan(e[i].to,u);
low[u]=min(low[u],low[e[i].to]);
if(low[e[i].to]>dfn[u]) cut[e[i].n]=true;
}
else if(e[i].to!=fa)
low[u]=min(low[u],dfn[e[i].to]);
}