0%

684. 冗余连接

思路讲解

无向图判环模版题,做cf之前来练练手

// 如果union函数发现根本不需要合并,那么a本来就在b的这个集合内

// 说明b有两条到达a的通路即形成了环

比较重要的两句话

AC代码

union是保留字,建议改为add(意思反正是这个意思);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution {
public:
vector<int> findRedundantConnection(vector<vector<int>>& edges) {
vector<int> fa(1010);
int n=edges.size();
for(int i=1;i<=n;++i){ // 并查集初始化
fa[i]=i;
}
for(int i=0;i<n;++i){
int a=edges[i][0],b=edges[i][1];
// 如果union函数发现根本不需要合并,本来就在这个集合内
// 说明b有两条到达a的通路即形成了环
if(!unionn(a,b,fa)){
return {a,b};
}
}
return {0,0};
}
int find(int x , vector<int> &fa){
if(fa[x]!=x)
fa[x]=find(fa[x],fa);
return fa[x];
}
bool unionn(int a, int b, vector<int>& fa){
if(find(a,fa)==find(b,fa)){
return false;
}else{
fa[find(a,fa)]=find(b,fa);
return true;
}
}
};

心路历程(WA,TLE,MLE……)

哈哈,第一次写力扣嘛,总归会遇到点问题,比如啥全角字符,什么union保留字,什么·······,不多赘述。