class Solution {
public int[] findRedundantConnection(int[][] edges) {
int n = edges.length;//有几个节点就有几条边
UnionFind uf = new UnionFind(n);
for(int i=0;i<n;i++){
int[] edge = edges[i];
boolean flag = uf.union(edge[0],edge[1]);
//System.out.println(flag);
if(flag== false)
return edge;
}
return null;
}
public class UnionFind{
private int[] parent;
public UnionFind(int n){
this.parent = new int[n+1];
for(int i=1;i<=n;i++)
this.parent[i] = i;
}
public int find(int x){
//寻找根节点 以路径压缩的方式
//路径压缩使每个节点的父节点 指向根节点
if(parent[x] != x){
parent[x] = find(parent[x]);
}
return parent[x];
}
public boolean union(int x,int y){
int rootX = find(x);
int rootY = find(y);
// System.out.println(rootX);
// System.out.println(rootY);
if(rootX == rootY)
return false;
parent[rootY] = rootX;
return true;
}
}
}