解題思路
用 union find 來解這題。
如果 edge 的兩個 node 已屬於同個 union,即可知該 edge 為多餘的。
程式碼
class Solution {
public:
int *dsu, *rank;
int size;
int find_set(int v)
{
if(dsu[v] == v) return v;
return dsu[v] = find_set(dsu[v]);
}
void make_union(int u, int v)
{
u = find_set(u), v = find_set(v);
if(u != v)
{
if(rank[u] > rank[v])
{
dsu[v] = u;
rank[u] += rank[v];
}
else
{
dsu[u] = v;
rank[v] += rank[u];
}
}
}
vector<int> findRedundantConnection(vector<vector<int>>& edges) {
this->size = edges.size() + 1;
this->dsu = new int[size];
this->rank = new int[size];
for(int i=0; i<size; i++)
{
dsu[i] = i;
rank[i] = 1;
}
for(int i=0; i<edges.size(); i++)
{
if(find_set(edges[i][0]) == find_set(edges[i][1]))
return edges[i];
make_union(edges[i][0], edges[i][1]);
}
return edges[0];
}
};