• 关于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~

  • 相关阅读:
    Electron踩坑记录
    TypeScript实现设计模式——生成器模式
    在express中使用ES7装饰器构建路由
    微信小程序下载文件(非图片),并校验扩展名。
    防抖与节流
    yarn
    spark
    docker php-fpm中安装GD库
    thinkphp6 多应用路由遇坑记
    CentOS 7 开启SSH远程登录
  • 原文地址:https://www.cnblogs.com/Randolph68706/p/15089659.html
Copyright © 2020-2023  润新知