AAlgoLoopSpaced repetition for LeetCode
MEDIUMUnion-Find (Disjoint Set)LeetCode ↗

Redundant Connection

The key idea

Add the edges one by one with a Disjoint Set Union. For each edge, if its two endpoints are already in the same set, that edge would create a cycle, so it is the redundant one. Because we scan in order, the first such edge we hit is also the last redundant edge the problem asks for.

Problem

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 given as an array edges of length n, where edges[i] = [ai, bi] indicates that there is an edge between nodes ai and bi. 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.

Constraints

Examples

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

Complexity

Time: O(n α(n)) Space: O(n)

See the full solution

410310
Step-by-step visualization
Start free →

More Union-Find (Disjoint Set) problems