targan算法
1、时间戳
2、追溯值(从某个节点出发所能到的时间戳最小值)
3、割点(去掉割点无法联通)
4、割边判断(子节点追溯值>父节点时间戳,意思就是子节点到达不了父节点)
def criticalConnections(self, n: int, connections: List[List[int]]) -> List[List[int]]:
hashmap = [[] for _ in range(n)]
for u,v in connections:
hashmap[u].append(v)
hashmap[v].append(u)
low = [float('inf')] * n
dfn = [-1] * n
res = []
def dfs(node,parent,deep):
low[node] = dfn[node] = deep
for child in hashmap[node]:
if child == parent:
continue
if dfn[child] == -1:
dfs(child,node,deep+1)
low[node] = min(low[node],low[child])
if dfn[node] <= low[child]:
res.append([node,child])
else:
low[node] = min(low[node],dfn[child])
dfs(0,-1,0)
return res