Redundant Connection
In this problem, a tree is an undirected graph that is connected and has no cycles.
The given input is a graph that started as a tree with N nodes (with distinct values 1, 2, …, 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 resulting graph is given as a 2D-array of edges. Each element of edges is a pair [u, v] with u < v, that represents an undirected edge connecting nodes u and v.
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 given 2D-array. The answer edge [u, v] should be in the same format, with u < v.
Example 1:
1 | Input: [[1,2], [1,3], [2,3]] |
Explanation: The given undirected graph will be like this:
1
/
2 - 3
Example 2:
1 | Input: [[1,2], [2,3], [3,4], [1,4], [1,5]] |
Explanation: The given undirected graph will be like this:
5 - 1 - 2
| |
4 - 3
Note:
The size of the input 2D-array will be between 3 and 1000.
Every integer represented in the 2D-array will be between 1 and N, where N is the size of the input array.
题意分析
该题给定一个代表连接的二维数组,要寻找出一条冗余的边,去掉这条边可以将图变成树。最简单的考虑是利用union-find数据结构,当我们遇到一个连接时,首先检查是否这两个点已经连通,如果连通,那么说明这条边是一条冗余的边,由于题目要求多条冗余边出现时,返回最后一条,所以将这条边加入栈中。如果两点尚未连通,将其连通即可。
代码实现
1 | class Solution { |