酷代码 AI
菜单
服务商

作为c++开发,并查集。手写代码实现

以下是一个简单的C++并查集实现: ```cpp #include <vector> #include <algorithm> class UnionFind { private: std::vector<int> p, rank; public: UnionFind(int n) : p(n), rank(n, 0) { for(int i = 0; i < n; ++i) p[i] = i; } int find(int x) { return p[x] == x ? x : p[x] = find(p[x]); } void unite(int x, int y) { x = find(x); y = find(y); if(x == y) return; if(rank[x] < rank[y]) std::swap(x, y); p[y] = x; if(rank[x] == rank[y]) ++rank[x]; } bool same(int x, int y) { return find(x) == find(y); } }; ``` 在这个实现中,我们使用了两个向量,`p`和`rank`。`p`用于存储每个元素的父节点,`rank`用于存储每个树的大小。`find`函数用于查找一个元素的根节点,`unite`函数用于合并两个树,`same`函数用于判断两个元素是否在同一个树中。 [2023-11-09 00:48:48 | AI写代码神器 | 274点数解答]

相关提问
请收藏新域名:pdcd.cn
发财导航,免费问AI
实用工具查看更多
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]
数独游戏 [娱乐类]
经典推箱子 [娱乐类]
AI摸鱼五子棋 [娱乐类]