更新图片链接

This commit is contained in:
kama
2025-05-19 17:11:04 +08:00
parent b489cb69b5
commit ce6e658d14
315 changed files with 2499 additions and 1729 deletions

View File

@@ -105,13 +105,13 @@ bool isSame(int u, int v) {
搜索过程像是一个多叉树中从叶子到根节点的过程,如图:
![](https://file.kamacoder.com/pics/20230602102619.png)
![](https://file1.kamacoder.com/i/algo/20230602102619.png)
如果这棵多叉树高度很深的话每次find函数 去寻找根的过程就要递归很多次。
我们的目的只需要知道这些节点在同一个根下就可以,所以对这棵多叉树的构造只需要这样就可以了,如图:
![](https://file.kamacoder.com/pics/20230602103040.png)
![](https://file1.kamacoder.com/i/algo/20230602103040.png)
除了根节点其他所有节点都挂载根节点下,这样我们在寻根的时候就很快,只需要一步,
@@ -226,7 +226,7 @@ join(3, 2);
此时构成的图是这样的:
![](https://file.kamacoder.com/pics/20230525111307.png)
![](https://file1.kamacoder.com/i/algo/20230525111307.png)
此时问 13是否在同一个集合我们调用 `join(1, 2); join(3, 2);` 很明显本意要表示 13是在同一个集合。
@@ -256,7 +256,7 @@ join(3, 2);
构成的图是这样的:
![](https://file.kamacoder.com/pics/20230525112101.png)
![](https://file1.kamacoder.com/i/algo/20230525112101.png)
因为在join函数里我们有find函数进行寻根的过程这样就保证元素 123在这个有向图里是强连通的。
@@ -275,12 +275,12 @@ join(3, 2);
1、`join(1, 8);`
![](https://file.kamacoder.com/pics/20231122112727.png)
![](https://file1.kamacoder.com/i/algo/20231122112727.png)
2、`join(3, 8);`
![](https://file.kamacoder.com/pics/20231122113857.png)
![](https://file1.kamacoder.com/i/algo/20231122113857.png)
有录友可能想,`join(3, 8)` 在图中为什么 将 元素1 连向元素 3 而不是将 元素 8 连向 元素 3 呢?
@@ -288,12 +288,12 @@ join(3, 2);
3、`join(1, 7);`
![](https://file.kamacoder.com/pics/20231122114108.png)
![](https://file1.kamacoder.com/i/algo/20231122114108.png)
4、`join(8, 5);`
![](https://file.kamacoder.com/pics/20231122114847.png)
![](https://file1.kamacoder.com/i/algo/20231122114847.png)
这里8的根是3那么 5 应该指向 8 的根 3这里的原因我们在上面「常见误区」已经讲过了。 但 为什么 图中 8 又直接指向了 3 了呢?
@@ -310,11 +310,11 @@ int find(int u) {
5、`join(2, 9);`
![](https://file.kamacoder.com/pics/20231122115000.png)
![](https://file1.kamacoder.com/i/algo/20231122115000.png)
6、`join(6, 9);`
![](https://file.kamacoder.com/pics/20231122115404.png)
![](https://file1.kamacoder.com/i/algo/20231122115404.png)
这里为什么是 2 指向了 6因为 9的根为 2所以用2指向6。
@@ -347,13 +347,13 @@ rank表示树的高度即树中结点层次的最大值。
例如两个集合(多叉树)需要合并,如图所示:
![](https://file.kamacoder.com/pics/20230602172250.png)
![](https://file1.kamacoder.com/i/algo/20230602172250.png)
树1 rank 为2树2 rank 为 3。那么合并两个集合是 树1 合入 树2还是 树2 合入 树1呢
我们来看两个不同方式合入的效果。
![](https://file.kamacoder.com/pics/20230602172933.png)
![](https://file1.kamacoder.com/i/algo/20230602172933.png)
这里可以看出树2 合入 树1 会导致整棵树的高度变的更高,而 树1 合入 树2 整棵树的高度 和 树2 保持一致。
@@ -454,3 +454,4 @@ void join(int u, int v) {
敬请期待 并查集题目精讲系列。
<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>