并查集
学习记录自代码随想录
并查集可以解决的问题:
并查集常用来解决连通性问题。
判断两个元素是否在同一个集合里的时候,要想到用并查集。
并查集主要有两个功能:
1.将两个元素添加到一个集合中;
2.判断两个元素在不在同一个集合。
代码模板
int n = 1005; // 节点数量大于题目要求一点即可
vector<int> father(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 isSameRoot(int u, int v){
u = find(u);
v = find(v);
return u == v;
}
// 将v-u这条边加入并查集
void join(int u, int v){
u = find(u);
v = find(v);
// 同一个根则说明在同一个集合,不需要节点相连
if(u == v) return;
father[v] = u;
}
例题:20240410 Huawei机考