684. 冗余连接
思路:有一系列的边连成的图,找出一条边,移除它之后该图能够成为一棵树。
Input: [[1,2], [1,3], [2,3]]
Output: [2,3]
Explanation: The given undirected graph will be like this:
1
/ \
2 - 3
如果移除一条边可以成为一棵树那就意味着这个图存在环路,那么移除这个环的任意边即可(题目要求是最后一条边),所以我们可以使用并查集来记录每个节点的最前前驱节点,也就是父节点,如果两个节点的父节点相同,证明这两个节点是相连的,如果这两个节点不相连,我们可以将其父节点改成相同来使这两个节点连同。现在我们来定义并查集的数据结构:
class DSU{
int[] parent;
public DSU(int N){
parent = new int[N+1];
for(int i=0;i<N;i++){
parent[i] = i;
}
}
public int find(int x){
if(parent[x] != x) parent[x] = find(parent[x]);
return parent[x];
}
public void union