联通分量:对于分量中的任意两个点u v 必然可以从u走到v 从v走到u
强连通分量:极大
强联通分量问题:一般可以 将任意一个有向图 转化为一个 有向无环图(dag 拓扑图)
通过 将所有联通分量缩成一个点
拓扑图: 最最短路可以通过递推变成线性的复杂度
通过dfs顺序来求强联通分量
对于没跳边分成四大类:
树枝边(x,y)也就是正常的情况 x是y的父节点
前向边(x,y) x是y的祖先节点
后向边(x,y) y是x的祖先节点
横插边(x,y) 往搜过的分支搜的(不会往没搜过的搜)
判断点在不在强联通分量上:就是判断点能不能走到祖先节点
引入时间戳的概念:
对于每个点定义两个时间戳
dfn{u]:表示遍历到u时候的时间戳
low[u]:沿着自己的子树走 能遍历到的最小时间轴是什么
u是他所在强联通分量的最高点 等价于 dfs[u]==low[u] 意味着走不到他上面 所以就不在强连通分量上