概念

并查集,正如它名字一样,一种负责对集合的合并(Union)与查询(Find)的数据结构。

代码

#include<bits/stdc++.h>
using namespace std;
int n = 1005; // n根据题目中节点数量而定,一般比节点数量大一点就好
vector<int> father = vector<int> (n, 0); // C++里的一种数组结构

// 并查集初始化
void init() {
for (int i = 0; i < n; ++i) {
father[i] = i;
}
}
// 并查集里寻根的过程
int find(int u) {
if(father[u]==u) return u;
else{
int x=find(father[u]);
father[u]=x;
return x;
}

}
// 将v->u 这条边加入并查集
void join(int u, int v) {
u = find(u); // 寻找u的根
v = find(v); // 寻找v的根
if (u == v) return ; // 如果发现根相同,则说明在一个集合,不用两个节点相连直接返回
father[v] = u;
}

// 判断 u 和 v是否找到同一个根
bool isSame(int u, int v) {
u = find(u);
v = find(v);
return u == v;
}


int main()
{
init();
/*
1->3->5;
2->4->6
*/
join(3,1);
join(5,3);
cout<<isSame(1,5)<<endl;
}