题目大意:删除所给边中的一条边,使所剩的边是一颗树。
分析:并查集的应用。本题就是每加入一条边就判断它能不能使整个图中有环,也就是判断加入边的两点是否在同一个连通分量上。
代码:
class Solution {
int fa[1001];
public:
vector<int> findRedundantConnection(vector<vector<int>>& edges) {
for(int i = 0;i < 1001;i++){
fa[i] = i;
}
for(int i = 0;i < edges.size();i++){
int fx = find(edges[i][0]);
int fy = find(edges[i][1]);
if(fx == fy) return edges[i];
else fa[fy] = fx;
}
return {};
}
int find(int x){
if(fa[x] != x) fa[x] = find(fa[x]); //路径压缩,搜索更快
return fa[x];
}
};