684. 冗余连接
树是有n-1
条边的图,再增加一条边,某个子图形成环。按照给定的边,依次在并查集中相连,首次出现集合内相连的边,就是形成环的冗余边
class Solution {
public:
int root(int *u, int p){
if (p != u[p])
u[p] = root(u, u[p]); //路径压缩优化
return u[p];
}
void connect(int *u, int i, int j){
u[root(u, j)] = root(u, i);
}
bool isConnected(int *u, int i, int j){
return root(u, i) == root(u, j);
}
vector<int> findRedundantConnection(vector<vector<int>>& edges) {
int n = edges.size(), *u = new int[n+1];
vector<int> res(2);
for(int i=1; i<n+1; i++) u[i] = i;
for(int i=0; i<n; i++){
int from = edges[i][0], to = edges[i][1];
if(!isConnected(u, from, to)) connect(u, from, to);
else {
res[0] = from, res[1] = to;
break;
}
}
delete[] u;
return res;
}
};
/* 99.8% **/
2010/01/14