作业介绍
【算法入门-21】生成树与并查集
- 课件
- 生成树与并查集.pdf
- 这周的作业先不用做,我们后面还会再讲
-
B 站学习视频:
-
并查集模板(如果你不想写这么长,请自己修改)
// 并查集(Union-Find Disjoint Sets/DSU)
struct DSU {
int n;
vector<int> f, sz;
DSU(int N): n(N) {
// 将 f 的 size 设置为 n + 1
f.resize(n + 1);
// 相当于 for (int i = 0; i <= n; i++) f[i] = i;
// 将从 0 开始的一段连续的数赋值给 f.begin() 到 f.end()
iota(f.begin(), f.end(), 0);
// 将 sz 的 size 设置为 n + 1, 并初始化为 1
sz.assign(n + 1, 1);
// 对于 vector 的初始化
// 如果只需要设置 size, 不需要设置初值, 用 resize
// 如果既需要设置 size, 也需要设置初值, 用 assign
}
// 路径压缩
int find(int x) {
return f[x] == x ? f[x] : f[x] = find(f[x]);
}
// 判断 x, y 是否在同一集合
bool same(int x, int y) {
return find(x) == find(y);
}
// 启发式合并
int merge(int x, int y) {
x = find(x), y = find(y);
if (x == y) return x;
// 将 sz小的 合并到 sz大的
if (sz[x] < sz[y]) swap(x, y);
sz[x] += sz[y], f[y] = x;
return x;
}
// 返回 x 所在的集合的大小
int size(int x) {
return sz[find(x)];
}
};
题目
| 状态 | 最后递交于 | 题目 |
|---|---|---|
| 2025-12-13 21:52:48 | P1551 亲戚 | |
| 2025-12-13 11:10:28 | LS1276 【普及】最小生成树 | |
| 没有递交 | - | LS1272 【普及】最小比率生成树 |
| 没有递交 | - | P1194 买礼物 |
| 没有递交 | - | P2700 逐个击破 |
| 没有递交 | - | P1396 营救 |
| 没有递交 | - | LS1275 【普及】新朋友 |
| 没有递交 | - | P1141 01迷宫 |
| 没有递交 | - | LS1273 【普及】删除与联通 |
| 没有递交 | - | LS1274 【普及】向右寻找 |
- 状态
- 正在进行…
- 题目
- 10
- 开始时间
- 2025-12-13 8:00
- 截止时间
- 2027-8-21 23:59
- 可延期
- 24 小时