用并查集可以判断图有没有环,扫描一遍边,先看看两个顶点是否连通,如果已经联通,说明这条边就是多余的,如果没有联通,则在并查集中把两条边连起来。
const int N = 3000;
class Solution {
public:
int p[N];
int find(int x){
if(p[x]!=x) p[x] = find(p[x]);
return p[x];
}
vector<int> findRedundantConnection(vector<vector<int>>& edges) {
for(int i=0;i<N;i++) p[i] = i;
for(auto edge:edges){
if(find(edge[0])==find(edge[1])) return edge;
else {
p[find(edge[0])] = find(edge[1]);
}
}
return edges[0];
}
};