添加字典树、并查集、Dijkstra算法

This commit is contained in:
2025-06-03 16:30:03 +08:00
parent 3015523239
commit 9a5e746691
3 changed files with 120 additions and 0 deletions

36
union-find_sets.cpp Normal file
View File

@ -0,0 +1,36 @@
class UnionFind {
vector<int> _pre; // 代表元
vector<int> _rank; // 集合的秩
public:
UnionFind(int n) : _pre(n), _rank(n, 1), cc(n) {
// iota(fa.begin(), fa.end(), 0);
ranges::iota(fa, 0);
}
int find(int x) {
return _pre[x] == x ? x : _pre[x] = fint(_pre[x]);
}
bool same(int x, int y) {
return find(x) == find(y);
}
bool merge(int from, int to) {
int x = find(from), y = find(to);
if (x == y) {
return false; //同一集合不做合并
}
if (_rank[x] < _rank[y]) {
_pre[x] = y;
}
else if (_rank[x] > _rank[y]) {
_pre[y] = x;
}
else {
_pre[x] = y;
_rank[y]++;
}
return true;
}
};