Python - 100% Time solution
We know that an articulated edge is an edge that sits outside of a cycle.\n\nFrom this, we can create a DFS spanning tree, and we know that whenever a child can
We know that an articulated edge is an edge that sits outside of a cycle.\n\nFrom this, we can create a DFS spanning tree, and we know that whenever a child can reach a higher distance node (or equal) to parent via a backedge, we have a cycle detected.\nTherefore, let\'s negate that statement, if the lowest node a child can hit is smaller than parent distance node, we couldn\'t find a cycle on that path. Hence it\'s a critical connection\n\nCode:\n\n```\nclass Solution:\n    def criticalConnections(self, n: int, connections: List[List[int]]) -> List[List[int]]:\n        if not connections: return None\n        graph = defaultdict(list)\n        distances = {}\n        visited = set([0])\n        critical_connections = list()\n        \n        def dfs(node, parent, distance):\n            cur_distance = distance\n            distances[node] = distance\n            lowest_reach = distance\n            \n            for neighbor in graph[node]:\n                if neighbor not in visited:\n                    visited.add(neighbor)\n                    lowest, distance = dfs(neighbor, node, distance + 1)\n                    if lowest > cur_distance:\n                        critical_connections.append((node, neighbor))\n                        \n                    lowest_reach = min(lowest_reach, lowest)\n                \n                elif neighbor != parent:\n                    lowest_reach = min(lowest_reach, distances[neighbor])\n\n            return (lowest_reach, distance)\n        \n        for u, v in connections:\n            graph[u].append(v)\n            graph[v].append(u)\n        \n        dfs(0, None, 1)\n        return critical_connections\n```
[]