关于网站首页建设的文章,会员制营销,wordpress to微博,南京建设主管部门网站每日一题#xff0c;今天又刷到一道使用并查集来解决的问题#xff0c;再次加深了一遍自己对并查集的印象和使用。 
题目要求 
树可以看成是一个连通且 无环 的 无向 图。 
给定往一棵 n 个节点 (节点值 1#xff5e;n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1…每日一题今天又刷到一道使用并查集来解决的问题再次加深了一遍自己对并查集的印象和使用。 
题目要求 
树可以看成是一个连通且 无环 的 无向 图。 
给定往一棵 n 个节点 (节点值 1n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间且这条附加的边不属于树中已存在的边。图的信息记录于长度为 n 的二维数组 edges edges[i]  [ai, bi] 表示图中在 ai 和 bi 之间存在一条边。 
请找出一条可以删去的边删除后可使得剩余部分是一个有着 n 个节点的树。如果有多个答案则返回数组 edges 中最后出现的边。 题目解析及代码 
本题明显可以使用并查集的思想如果判断是否已经来连接可以在两个节点合并前加上一个判断如果通过find方法发现这两个节点处在一个集体中那么让记录下这个数据最后遍历到最后即使有多个结果是冗余这样也会直接指向最后一个结果。 
如果对并查集的思想不是很理解可以查看我的另外一篇博客里面做出了详细的解释。 
LeetCode547——省份数量并查集 
下面为实现代码 
class Solution {public int[] findRedundantConnection(int[][] edges) {int[] res  new int[2]; int len  edges.length;int[] p  new int[len];for(int i 0;ilen;i){p[i]  i;}for(int i 0;ilen;i){int x1  edges[i][0]-1;int x2  edges[i][1]-1;if(find(p,x1)find(p,x2)){res  edges[i];}union(p,x1,x2);}return res;}public void union(int[] p,int index1,int index2){int x1  find(p,index1);int x2  find(p,index2);p[x2]  x1; }public int find(int[] p,int index){if(p[index]!index){p[index]  find(p,p[index]);}return p[index];}
}