树的重心

树的重心的性质

  1. 树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个距离和,他们的距离和一样。
  2. 删除重心后所得的所有子树,节点数不超过原树的1/2,一棵树最多有两个重心;
  3. 把两棵树通过一条边相连,新的树的重心在原来两棵树重心的连线上。
  4. 一棵树添加或者删除一个节点,树的重心最多只移动一条边的位置。
  5. 一棵树最多有两个重心,且相邻。
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;
}
posted @ 2025-08-01 14:40  飞花阁  阅读(18)  评论(0)    收藏  举报
//雪花飘落效果