ok
看题:
在本问题中, 树指的是一个连通且无环的无向图。
输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。
结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。
返回一条可以删去的边,使得结果图是一个有着N个节点的树。如果有多个答案,则返回二维数组中最后出现的边。答案边 [u, v] 应满足相同的格式 u < v。
图图图,全是图,就是说要把图变成树,树就是连通的,但是不构成环,你要删除一条边,让它构成环。
代码:
class Solution {
public:
int find(vector<int>& p,int index){
if(p[index]!=index){//用于找根
p[index]=find(p,p[index]);
}
return p[index];
}
void un(vector<int>& p,int index1,int index2){
p[find(p,index1)]=find(p,index2);//连通两个节点
}
vector<int> findRedundantConnection(vector<vector<int>>& edges) {
int n = edges.size();
vector<int> p(n+1);
for(int i=1;i<=n;i++){
p[i]=i;
}
for(auto& t:edges){
int x=t[0],y=t[1];
if(find(p,x)!=find(p,y)){//如果两个根不同,就连接两个节点
un(p,x,y);
}
else{
return t;//如果根相同就会构成环,就要可以删除
}
}
return vector<int>{};
}
};
一般偏下的ok