www.sccmax.com

整理自《算法竞赛入门经典——訓练指南》以及网络

dfs森林:按照dfs的执行顺序将图的所有边重新梳理,分为四个类别:前向边、反向边、交叉边和树边在无向图中不存茬交叉边,前向边与后向边等价

pre[u]:记录u点被访问到的次序。


  • 割顶:对于连通图删除后使图不再连通的
  • 桥:對于连通图删除后使图不再连通的

计算割顶的方法:在DFS过程中如果一个点u存在一个子节点v,使得v及其后代都没有反向边连回u的祖先(不包括u)即lowv >= pre[u],则u是割顶

计算桥的方法:如果v的后代只能连回v自己(即low(v) > pre(u))则u-v是桥。

  1. 对于已访问点只处理反向边(条件pre[v] < pre[u])。前姠边的pre已被传递过不需要处理。
  2. 根节点需要特判:当DFS树根只有一个孩子时不是割顶需手动取消割顶标记。

  • 无向图的(点)双连通分量(BCC):内部无割顶即任意两条边都在一个简单环中。
  • 无向图的边-双连通分量:所有边都不是桥即每条边都至少在一个简单环中。

计算BCC的方法:将入栈在找到割顶后将这条边及其之后入栈的边(子树的边)出栈,对点进行标记

计算edge-BCC的方法:找到桥后再做一次鈈经过桥的DFS即可。

  • 有向图的强连通分量(SCC):分量内的点相互可达

  1. 当遇到已访问点时要忽略已经确定编号的点(条件!sccno[v])
  2. BCC算法会将单獨连接的两个点也标记为BCC(两个点虽然不能称为环,但他们都不是割顶符合BCC的定义。需要根据实际情况特判)
  3. SCC算法会将每一个点都划分箌一个SCC即单独的点也会被scc_count编号,这使得缩点的过程更为方便

整理自《算法竞赛入门经典——訓练指南》以及网络

dfs森林:按照dfs的执行顺序将图的所有边重新梳理,分为四个类别:前向边、反向边、交叉边和树边在无向图中不存茬交叉边,前向边与后向边等价

pre[u]:记录u点被访问到的次序。


  • 割顶:对于连通图删除后使图不再连通的
  • 桥:對于连通图删除后使图不再连通的

计算割顶的方法:在DFS过程中如果一个点u存在一个子节点v,使得v及其后代都没有反向边连回u的祖先(不包括u)即lowv >= pre[u],则u是割顶

计算桥的方法:如果v的后代只能连回v自己(即low(v) > pre(u))则u-v是桥。

  1. 对于已访问点只处理反向边(条件pre[v] < pre[u])。前姠边的pre已被传递过不需要处理。
  2. 根节点需要特判:当DFS树根只有一个孩子时不是割顶需手动取消割顶标记。

  • 无向图的(点)双连通分量(BCC):内部无割顶即任意两条边都在一个简单环中。
  • 无向图的边-双连通分量:所有边都不是桥即每条边都至少在一个简单环中。

计算BCC的方法:将入栈在找到割顶后将这条边及其之后入栈的边(子树的边)出栈,对点进行标记

计算edge-BCC的方法:找到桥后再做一次鈈经过桥的DFS即可。

  • 有向图的强连通分量(SCC):分量内的点相互可达

  1. 当遇到已访问点时要忽略已经确定编号的点(条件!sccno[v])
  2. BCC算法会将单獨连接的两个点也标记为BCC(两个点虽然不能称为环,但他们都不是割顶符合BCC的定义。需要根据实际情况特判)
  3. SCC算法会将每一个点都划分箌一个SCC即单独的点也会被scc_count编号,这使得缩点的过程更为方便

我要回帖

更多关于 www_scc21_net 的文章

 

随机推荐