Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 38f8494

Browse files
committed
Update 0834. 树中距离之和.md
1 parent dd1d3bf commit 38f8494

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

‎Solutions/0834. 树中距离之和.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151

5252
对于节点 $u,ドル定义 $dp[u]$ 为:以节点 $u$ 为根节点的树,它的所有子节点到它的距离之和。
5353

54-
然后进行一轮深度优先搜索,在搜索的过程中得到以节点 $v$ 为根节点的树,节点 $v$ 与所有其他子节点之间的距离之和 $dp[v]$。还能得到以节点 $v$ 为子树的子节点个数 $sizes[v]$。
54+
然后进行一轮深度优先搜索,在搜索的过程中得到以节点 $v$ 为根节点的树,节点 $v$ 与所有其他子节点之间的距离之和 $dp[v]$。还能得到子树的节点个数 $sizes[v]$。
5555

5656
对于节点 $v$ 来说,其对 $dp[u]$ 的贡献为:节点 $v$ 与所有其他子节点之间的距离之和,再加上需要经过 $u \rightarrow v$ 这条边的节点个数,即 $dp[v] + sizes[v]$。
5757

@@ -61,7 +61,10 @@
6161

6262
我们可以使用「二次遍历换根法」进行优化,从而在 $O(n)$ 的时间复杂度内解决这道题。
6363

64-
第一次遍历:
64+
以编号为 0ドル$ 的节点为根节点,进行两次深度优先搜索。
65+
66+
1. 第一次遍历:从编号为 0ドル$ 的根节点开始,自底向上地计算出节点 0ドル$ 到其他的距离之和,记录在 $ans[0]$ 中。并且统计出以子节点为根节点的子树节点个数 $sizes[v]$。
67+
2. 第二次遍历:从编号为 0ドル$ 的根节点开始,自顶向下地枚举每个点,计算出将每个点作为新的根节点时,其他节点到根节点的距离之和。如果当前节点为 $v,ドル其父节点为 $u,ドル则自顶向下计算出 $ans[u]$ 之后,我们将根节点从 $u$ 换为节点 $v,ドル子树上的点到新根节点的距离比原来都小了 1ドル,ドル非子树上剩下所有点到新根节点的距离比原来都大了 1ドル$。则可以据此计算出节点 $v$ 与其他节点的距离和为:$ans[v] = ans[u] + n - 2 \times sizes[u]$。
6568

6669
### 思路 1:代码
6770

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /