684.冗余连接
题目链接:684.冗余连接
代码如下:
class Solution
{
public:
vector<int> findRedundantConnection(vector<vector<int>>& edges)
{
init();
for(int i=0;i<edges.size();i++)
{
if(isSame(edges[i][0],edges[i][1])) return edges[i];
else join(edges[i][0],edges[i][1]);
}
return {};
}
private:
int n=200005;
vector<int> father=vector<int>(n, 0);
//并查集初始化
void init()
{
for(int i=0;i<n;i++)
{
father[i]=i;
}
}
//并查集寻根
int find(int u)
{
return u==father[u]?u:father[u]=find(father[u]);//路径压缩
}
//并查集判定u,v是否是一个根
bool isSame(int u,int v)
{
u=find(u);
v=find(v);
return u==v;
}
//将v->v这条边加入并查集
void join(int u,int v)
{
u=find(u);
v=find(v);
if(u==v) return;
father[v]=u;
}
};