树的直径
树的直径
直径就是树上两个节点中的最长距离
解法
跑两次dfs,先求出距离x最远的点y,再对y跑一次dfs计算最远距离
解法2dp维护最大与次大
long long diameter = 0;
long long dfs(int u, int parent) {
long long mx1 = 0;
long long mx2 = 0;
for (auto [v, weight] : tree[u]) {
if (v == parent) {
continue;
}
long long candidate = dfs(v, u) + weight;
if (candidate > mx1) {
mx2 = mx1;
mx1 = candidate;
} else if (candidate > mx2) {
mx2 = candidate;
}
}
// 经过 u 的最长路径
diameter = max(diameter, mx1 + mx2);
// 返回 u 向下的最长链
return mx1;
}

浙公网安备 33010602011771号