当前位置: 首页 > news >正文

东方博宜OJ 2172:树的直径 ← 树形DP + 无权边

【题目来源】
https://oj.czos.cn/p/2172

【题目描述】
树的直径指的是,树中两点之间的最长路径。现给定一棵树的数据,请问该树的直径的是多少?

boyi2166

比如,如图所示的树,直径应该是 3−2−5−6,路径长度为 3。

【输入格式】
第 1 行有一个整数 n,代表结点的数量,结点的编号为 1~n。(n≤100)
接下来有 n-1 行,每行有 2 个整数 x,y,表示结点 x 和 y 之间有一条边。(不保证 x 是 y 的父)

【输出格式】
输出一个整数 n 代表树的直径。​​​​​​​

【输入样例】
6
1 2
3 2
5 6
2 4
5 2

【输出样例】
3

【数据范围】
n≤100

【算法分析】
● 什么是树的直径?树上任意两结点之间最长的简单路径即为树的直径。
若无负权边,可以采用两次 DFS 或者树形 DP 的方法在 O(n) 时间求出树的直径;若有负权边,则只能采用树形 DP 求解树的直径。显然,一棵树可以有多条直径,因为树中可能存在最长长度相等的多条简单路径。→ 推荐使用树形 DP 求解树的直径。

● 根据树形 DP 法原理,树的直径计算方法如下:
(1)路径定义‌:树的直径是树中任意两节点间最长的简单路径长度。
(2)状态转移‌:以某节点为根的子树,其延伸的最长路径长度记为 d1,次长路径长度记为 d2。树的直径即为所有节点 d1+d2 的最大值。
(3)路径特性‌:最长路径 d1 和次长路径 d2 无公共边,确保路径唯一性。

● 路径更新
若 d1[j]+1>d1[u],说明通过 j 的路径更长,更新 d1[u]=d1[j]+1,同时旧的最长路径 d1[u] 转为次长路径 d2[u]。
若 d1[j]+1<=d1[u] 但 d1[j]+1>d2[u],说明 j 的路径虽非最长,但比当前次长路径更长,更新 d2[u]=d1[j]+1。

● 更新方向
在树形 DP 中,路径长度从叶子节点(无子节点)开始计算,逐层向上更新父节点的路径长度。因此,j(子节点)确实会先于 u(父节点)被处理,符合“自下向上更新”的描述。
d1 和 d2 初始值为 0,表示所有节点的最长和次长路径长度从 0 开始计算,符合树形 DP 的初始化要求。​​​​​​​

【算法代码】
本题代码与“洛谷 B4016:树的直径”(https://blog.csdn.net/hnjzsyjyj/article/details/155581179)完全一样。

#include <bits/stdc++.h>
using namespace std;const int N=1e5+5;
int e[N<<1],ne[N<<1],h[N],idx;
int d1[N],d2[N];
int imax=INT_MIN;void add(int a,int b) {e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}void dfs(int u,int fa) {for(int i=h[u]; i!=-1; i=ne[i]) {int j=e[i];if(j==fa) continue;dfs(j,u);if(d1[j]+1>d1[u]) {d2[u]=d1[u];d1[u]=d1[j]+1;} else if(d1[j]+1>d2[u]) {d2[u]=d1[j]+1;}}imax=max(imax,d1[u]+d2[u]);
}int main() {memset(h,-1,sizeof h);int n;cin>>n;for(int i=1; i<n; i++) {int a,b;cin>>a>>b;add(a,b),add(b,a);}dfs(1,-1);cout<<imax<<endl;return 0;
}/*
in:
6
1 2
3 2
5 6
2 4
5 2out:
3
*/





【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/155581179
https://blog.csdn.net/hnjzsyjyj/article/details/155606132






 

http://www.zskr.cn/news/80329.html

相关文章:

  • 2025年质量好的进口报关权威榜 - 行业平台推荐
  • 2025FPC供应商推荐指南:这份清单帮你锁定靠谱合作伙伴 - 栗子测评
  • 交通便利的昆山墓地有哪家?周边陵园选择参考 - 品牌排行榜
  • ai论文软件推荐:提升写作效率的实用工具盘点 - 品牌排行榜
  • 制氮机哪家好?2025国内优质制氮机公司推荐与盘点 - 栗子测评
  • 2025数控加工中心机床厂家排名:多元优势与实力展现 - 栗子测评
  • ai论文网站推荐:高效工具助力学术创作 - 品牌排行榜
  • 2025铝合金重力铸造厂家哪家好?温州铝合金铸造厂实力比拼 - 栗子测评
  • 有智能功能的家用咖啡机品牌推荐:提升居家咖啡体验 - 品牌排行榜
  • 2025有实力的铝铸造厂家推荐:温州优质的铝铸造厂解析 - 栗子测评
  • 2025苏州AI优化公司推荐盘点 - 栗子测评
  • 聚焦2025医用隔离电源工厂:品质标杆,守护医疗供电安全 - 栗子测评
  • 2025年质量好的抽水蓄能水电站生产线厂家最新TOP排行榜 - 行业平台推荐
  • 聚焦2025:脱发消毒液推荐厂家怎么选?这份推荐来帮忙 - 栗子测评
  • 2025热流道厂家联系方式汇总:实力厂商指南 - 栗子测评
  • 全自动家用咖啡机推荐:品质之选与品牌解析 - 品牌排行榜
  • 工业过滤器推荐:多领域应用与优质产品解析 - 品牌排行榜
  • 2025年宁波静电粉末喷涂优质厂家推荐排行榜:专业视角解析五大服务商 - 2025年11月品牌推荐榜
  • 家用咖啡机推荐:全自动机型热门品牌与选购要点解析 - 品牌排行榜
  • 必看!2025残卫呼叫器厂家推荐,纠结残卫呼叫器哪家好的速进 - 栗子测评
  • 2025年服装拉链袋厂家最新测评,超实用 - 栗子测评
  • 2025EMC整改电子物料公司有哪些?EMC整改公司哪家好 - 栗子测评
  • 2025门窗隔热条厂家推荐测评 - 栗子测评
  • 2025年LEaudio蓝牙测试仪供应商推荐精选 - 栗子测评
  • 2025深圳蓝牙测试适配器厂家哪家好:深圳蓝牙测试仪厂家推荐 - 栗子测评
  • B2B外贸独立站谷歌优化公司有哪些?2025优化公司哪家好? - 栗子测评
  • 2025防爆空调品牌厂家推荐:守护危险环境的安全温控选择 - 栗子测评
  • 2025年下半年徐州汽车采样机工厂哪家靠谱? - 2025年11月品牌推荐榜
  • 2025中山留学中介推荐-优质留学中介深度盘点 - 栗子测评
  • 2025.12.10日5:10-career生涯;职业;事业;速度,全速