OSDN Git Service

Update tree-misc.md
authororzcyand1317 <36555123+orzcyand1317@users.noreply.github.com>
Tue, 5 Mar 2019 23:22:37 +0000 (07:22 +0800)
committerGitHub <noreply@github.com>
Tue, 5 Mar 2019 23:22:37 +0000 (07:22 +0800)
修改了一点小细节.
(主要是修改了代码...vis 那个玩意没人注意到么

docs/graph/tree-misc.md

index ceda6c8..9ba1a0d 100644 (file)
@@ -2,7 +2,7 @@
 
 ### 定义
 
-以这个点为根,那么所有的子树(不算整个树自身)的大小都不超过整个树大小的一半。
+以树的重心为根时,所有的子树(不算整个树自身)的大小都不超过整个树大小的一半。
 
 找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心。
 
 
 树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么他们的距离和一样。
 
-把两个树通过一条边相连得到一个新的树,那么新的树的重心在连接原来两个树的重心的路径上。
+把两棵树通过一条边相连得到一棵新的树,那么新的树的重心在连接原来两个树的重心的路径上。
 
-把一个树添加或删除一个叶子,那么它的重心最多只移动一条边的距离。
+在一棵树上添加或删除一个叶子,那么它的重心最多只移动一条边的距离。
 
 ### 求法
 
 树的重心可以通过简单的两次搜索求出。
 
-1.  第一遍搜索求出每个结点的子结点数量 $sz[u]
-2.  第二遍搜索找出使 $max\{sz[u],n-sz[u]-1\}$ 最小的结点
+1.  第一遍搜索求出以每个节点为根的子树中结点数量 $sz_{u}
+2.  第二遍搜索找出使 $\max_{v\in\operatorname{son}(u)}\{n-sz_{u},sz_{v}\}$ 最小的节点 $u$
 
-实际上这两步操作可以在一次遍历中解决。对结点 u 的每一个儿子 v,递归的处理 v,求出 sz[v],然后判断是否是结点数最多的子树,处理完所有子结点后,判断 u 是否为重心。
+实际上这两步操作可以在一次遍历中解决。对节点 u 的每一个儿子 v 递归处理,然后以 $sz_{v}$ 更新 $u$ 的子节点子树节点数最大值,处理完所有子结点后,判断 u 是否为重心。
 
 (代码来自叉姐)
 
@@ -39,7 +39,6 @@ struct CenterTree {
     for (int i = head[u]; i != -1; i = edges[i].next) {
       int v = edges[i].to;
       if (v == pa) continue;
-      if (vis[v]) continue;
       dfs(v, u);
       son[u] += son[v];
       res = max(res, son[v] - 1);