diff --git a/problems/算法模板.md b/problems/算法模板.md index 60046b68..b865cf30 100644 --- a/problems/算法模板.md +++ b/problems/算法模板.md @@ -238,4 +238,35 @@ void backtracking(参数) { ``` +## 并查集 + +int n = 1005; // 更具题意而定 +int father[1005]; + +// 并查集初始化 +void init() { + for (int i = 0; i < n; ++i) { + father[i] = i; + } +} +// 并查集里寻根的过程 +int find(int u) { + return u == father[u] ? u : father[u] = find(father[u]); +} +// 将v->u 这条边加入并查集 +void join(int u, int v) { + u = find(u); + v = find(v); + if (u == v) return ; + father[v] = u; +} +// 判断 u 和 v是否找到同一个根 +bool same(int u, int v) { + u = find(u); + v = find(v); + return u == v; +} +``` + + (持续补充ing)