DEV Community

Abhishek Chaudhary
Abhishek Chaudhary

Posted on

1 1

Redundant Connection

In this problem, a tree is an undirected graph that is connected and has no cycles.

You are given a graph that started as a tree with n nodes labeled from 1 to n, with one additional edge added. The added edge has two different vertices chosen from 1 to n, and was not an edge that already existed. The graph is represented as an array edges of length n where edges[i] = [ai, bi] indicates that there is an edge between nodes ai and bi in the graph.

Return an edge that can be removed so that the resulting graph is a tree of n nodes. If there are multiple answers, return the answer that occurs last in the input.

Example 1:

Input: edges = [[1,2],[1,3],[2,3]]
Output: [2,3]

Example 2:

Input: edges = [[1,2],[2,3],[3,4],[1,4],[1,5]]
Output: [1,4]

Constraints:

  • n == edges.length
  • 3 <= n <= 1000
  • edges[i].length == 2
  • 1 <= ai < bi <= edges.length
  • ai != bi
  • There are no repeated edges.
  • The given graph is connected.

SOLUTION:

class Solution:
    def DFS(self, node, graph, visited, src, dest):
        visited.add(node)
        for i in graph.get(node, []):
            if i not in visited:
                if (node, i) != (src, dest) and (i, node) != (dest, src):
                    self.DFS(i, graph, visited, src, dest)

    def findRedundantConnection(self, edges: List[List[int]]) -> List[int]:
        n = len(edges)
        graph = {}
        numnodes = 0
        for a, b in edges:
            numnodes = max(numnodes, a, b)
            graph[a] = graph.get(a, set()).union({b})
            graph[b] = graph.get(b, set()).union({a})
        for k in range(n - 1, -1, -1):
            a, b = edges[k]
            visited = set()
            self.DFS(a, graph, visited, a, b)
            if len(visited) == numnodes:
                return edges[k]
Enter fullscreen mode Exit fullscreen mode

Image of Datadog

The Essential Toolkit for Front-end Developers

Take a user-centric approach to front-end monitoring that evolves alongside increasingly complex frameworks and single-page applications.

Get The Kit

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay