关于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
注意这里到达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
同样注意这里到达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~