并查集检查网络c++
时间: 2023-12-21 07:03:41 浏览: 79
好的,这是一个问题,我会尽力回答。以下是一个使用并查集检查网络的C++代码示例:
```c++
#include <iostream>
#include <vector>
using namespace std;
// 并查集
class UnionFind {
public:
// 初始化
UnionFind(int size) {
count = size;
parent.resize(size);
for (int i = 0; i < size; i++) {
parent[i] = i;
}
}
// 查找
int find(int p) {
while (p != parent[p]) {
parent[p] = parent[parent[p]];
p = parent[p];
}
return p;
}
// 合并
void union_(int p, int q) {
int rootP = find(p);
int rootQ = find(q);
if (rootP == rootQ) {
return;
}
parent[rootP] = rootQ;
count--;
}
// 获取连通分量数
int getCount() const {
return count;
}
private:
vector<int> parent;
int count;
};
int main() {
int n, m;
cin >> n >> m;
// 初始化并查集
UnionFind uf(n);
int p, q;
for (int i = 0; i < m; i++) {
cin >> p >> q;
uf.union_(p, q);
}
// 输出连通分量数
cout << uf.getCount() << endl;
return 0;
}
```
这个程序首先读入节点数和边数,然后使用并查集将这些节点连接成一个网络。最后,它输出网络中的连通分量数。如果连通分量数为1,则说明整个网络是连通的;否则,网络中存在多个不相交的部分。
希望这个示例对你有所帮助。
阅读全文