树的重心
树的重心的性质
- 树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个距离和,他们的距离和一样。
- 删除重心后所得的所有子树,节点数不超过原树的1/2,一棵树最多有两个重心;
- 把两棵树通过一条边相连,新的树的重心在原来两棵树重心的连线上。
- 一棵树添加或者删除一个节点,树的重心最多只移动一条边的位置。
- 一棵树最多有两个重心,且相邻。
void dfs(int u, int fa) {
sz[u] = 1;
for (int e = hd[u]; e; e = eg[e].nx) {
int v = eg[e].v;
if (v == fa) continue;
dfs(v, u);
sz[u] += sz[v];
mx[u] = max(mx[u], sz[v]);
}
mx[u] = max(mx[u], n-sz[u]);
if (mx[u] <= n/2)
cn[cn[0]!=0] = u;
}

浙公网安备 33010602011771号