diff --git a/README.md b/README.md index f1e3ae24..d4c71ed5 100644 --- a/README.md +++ b/README.md @@ -283,6 +283,8 @@ * [动态规划:不同路径](https://mp.weixin.qq.com/s/MGgGIt4QCpFMROE9X9he_A) * [动态规划:不同路径还不够,要有障碍!](https://mp.weixin.qq.com/s/lhqF0O4le9-wvalptOVOww) * [动态规划:整数拆分,你要怎么拆?](https://mp.weixin.qq.com/s/cVbyHrsWH_Rfzlj-ESr01A) +* [动态规划:不同的二叉搜索树](https://mp.weixin.qq.com/s/8VE8pDrGxTf8NEVYBDwONw) + (持续更新中....) diff --git a/problems/算法模板.md b/problems/算法模板.md index b865cf30..01f42433 100644 --- a/problems/算法模板.md +++ b/problems/算法模板.md @@ -240,32 +240,33 @@ void backtracking(参数) { ## 并查集 -int n = 1005; // 更具题意而定 -int father[1005]; +``` + int n = 1005; // 更具题意而定 + int father[1005]; -// 并查集初始化 -void init() { - for (int i = 0; i < n; ++i) { - father[i] = i; + // 并查集初始化 + 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; } -} -// 并查集里寻根的过程 -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; -} ```