→ 红色的部分才是直径
→ 反过来,对于任意顶点
时间
这个树的直径有哪些?
直径的个数?
直径的个数?
→ 从两个不同的子树中各选一个深度是
→ 由于虚线的限制,不通过树的中心的路径,长度不超过
直径的个数?
→ (左侧深度等于

重心只有一个
如果不是这样,是什么情形呢?
(这两个定义等价)
vector<int> g[maxn];
int sz[maxn];
void get_size(int u, int p) {
sz[u] = 1;
for (int v : g[u])
if (v != p) {
dfs(v, u);
sz[u] += sz[v];
}
}
int n;
int centroid(int u, int p) {
for (int v : g[u])
if (v != p && sz[v] * 2 > n)
return centroid(v, u);
return u;
}
重心到每个点的距离之和最小。
考虑一个有
其中
那么,当且仅当
证明?
有一个有