zoukankan      html  css  js  c++  java
  • 关于Tarjan算法中用dfn不能用low的问题

    在Tarjan算法中对于dfn[V] != 0的情况,low[U] = min(low[U], dfn[V]) ❶
    而如果错写为low[U] = min(low[U], low[V]) ❷,可能导致答案错误

    有向图的强连通分量 SCC

    写成❷式可能导致low[U]算错,但一般不会影响最终答案(无向图的边双连通分量e-DCC似乎也是如此)

    例如如下数据,就会导致low[U]的错误

    5 6
    
    1 2
    2 3
    3 4
    3 1
    4 5 
    5 3
    

    SCC0.png

    注意这里到达3号点后先走向了1号点更新low[3],再走向4号点;如果先走向4号点,low[3]依然为3,此时low[4],low[5]就依然是3,例如将数据中“3 4”和“3 1”边的位置交换(这里用head邻接表存图,故后加入的边先遍历)

    5 6 
    
    1 2
    2 3
    3 1
    3 4
    4 5
    5 3
    

    无向图的点双连通分量 v-DCC

    写成❷式可能导致low[U]算错,而且一般会使割点找的不正确,导致错误答案

    例如如下数据,就会导致low[U]的错误

    5 6
    
    2 3
    5 3
    3 4
    3 1
    1 2
    4 5
    
    

    DCC0.png

    同样注意这里到达3号点后先走向了1号点更新low[3],再走向4号点;如果先走向4号点,low[3]依然为3,此时low[4],low[5]就依然是3,3号点也会被正确判断成割点。例如换成如下数据(这里用head邻接表存图,故后加入的边先遍历)

    5 6
    
    2 3
    3 1
    3 4
    5 3
    1 2
    4 5
    

    当然如果分析有不正确的地方欢迎留言指正qwq~

  • 相关阅读:
    redis改配置
    redis主从复制
    nginx做维护页面
    go_http
    DRF源码-views.py
    DRF教程10-关系字段
    语言特性
    DRF源码-fields.py
    python_@classmethod
    HTML5:定位
  • 原文地址:https://www.cnblogs.com/Randolph68706/p/15089659.html
Copyright © 2011-2022 走看看