目录
题目截图 题目分析 割边 割点 强连通子图 ac code tarjan模版 总结
题目截图
题目分析
割边
割点
强连通子图
我觉得就是割边左右的两个子图? 应该是去掉n条割边后,剩下n + 1个强连通子图的意思吧。。。
ac code
class Solution :
def criticalConnections ( self, n: int , connections: List[ List[ int ] ] ) - > List[ List[ int ] ] :
def check_graph ( edge, n) :
visit = [ 0 ] * n
root = [ 0 ] * n
cut_node = [ ]
cut_edge = [ ]
sub_group = [ ]
stack = [ ]
index = 1
def tarjan ( i, father) :
nonlocal index
visit[ i] = root[ i] = index
index += 1
stack. append( i)
for j in edge[ i] :
if j != father:
if not visit[ j] :
tarjan( j, i)
root[ i] = min ( root[ i] , root[ j] )
if visit[ i] < root[ j] :
cut_edge. append( [ i, j] )
if visit[ i] < root[ j] :
cut_node. append( i)
elif j in stack:
root[ i] = min ( root[ i] , visit[ j] )
if root[ i] == visit[ i] :
lst = [ ]
while stack[ - 1 ] != i:
lst. append( stack. pop( ) )
lst. append( stack. pop( ) )
r = min ( root[ ls] for ls in lst)
for ls in lst:
root[ ls] = r
sub_group. append( lst)
return
for k in range ( n) :
if not visit[ k] :
tarjan( k, - 1 )
return cut_edge, cut_node, sub_group
edges = defaultdict( list )
for a, b in connections:
edges[ a] . append( b)
edges[ b] . append( a)
cut_edge, cut_node, sub_group = check_graph( edges, n)
print ( cut_node)
return cut_edge
tarjan模版
def check_graph ( edge, n) :
visit = [ 0 ] * n
root = [ 0 ] * n
cut_node = [ ]
cut_edge = [ ]
sub_group = [ ]
stack = [ ]
index = 1
def tarjan ( i, father) :
nonlocal index
visit[ i] = root[ i] = index
index += 1
stack. append( i)
for j in edge[ i] :
if j != father:
if not visit[ j] :
tarjan( j, i)
root[ i] = min ( root[ i] , root[ j] )
if visit[ i] < root[ j] :
cut_edge. append( [ i, j] )
if visit[ i] < root[ j] :
cut_node. append( i)
elif j in stack:
root[ i] = min ( root[ i] , visit[ j] )
if root[ i] == visit[ i] :
lst = [ ]
while stack[ - 1 ] != i:
lst. append( stack. pop( ) )
lst. append( stack. pop( ) )
r = min ( root[ ls] for ls in lst)
for ls in lst:
root[ ls] = r
sub_group. append( lst)
return
for k in range ( n) :
if not visit[ k] :
tarjan( k, - 1 )
return cut_edge, cut_node, sub_group
输入:图g(defaultdict),总点数n 输出:割边,割点,极大连通子图
总结