当前位置: 首页 > 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.jsqmd.com/news/69771/

相关文章:

  • 手把手玩转8款免费AI论文工具:一键生成初稿超简单 - 麟书学长
  • 国内主流拥有规格和技术的开放自动化平台对比 - 品牌排行榜
  • 2025年质量好的进口报关权威榜 - 行业平台推荐
  • 推荐苏州交通便利的公墓:环境与服务兼备的选择 - 品牌排行榜
  • 常熟公墓推荐有哪些?本地合法墓园选择参考 - 品牌排行榜
  • 太仓交通便利的公墓推荐:环境与服务综合考量 - 品牌排行榜
  • 2025年靠谱的包装设计人气推荐榜 - 行业平台推荐
  • 2025FPC供应商推荐指南:这份清单帮你锁定靠谱合作伙伴 - 栗子测评
  • 交通便利的昆山墓地有哪家?周边陵园选择参考 - 品牌排行榜
  • 2025数控加工中心机床厂家哪家好?综合实力之选 - 栗子测评
  • 液压管件批发零售哪家好?2025液压管件生产厂家榜单揭秘 - 栗子测评
  • ai论文软件推荐:提升写作效率的实用工具盘点 - 品牌排行榜
  • 医用制氧机哪家好?2025医用制氧机厂家实力榜单 - 栗子测评
  • 2025年知名的食品包装设计/零食包装设计高满意度榜 - 行业平台推荐
  • 2025年实用AI论文工具推荐,高效辅助学术创作 - 品牌排行榜
  • 制氮机哪家好?2025国内优质制氮机公司推荐与盘点 - 栗子测评
  • 2025数控加工中心机床厂家排名:多元优势与实力展现 - 栗子测评
  • ai论文网站推荐:高效工具助力学术创作 - 品牌排行榜
  • 液压管接头批发哪家好?2025优质液压管件源头厂家实力推荐 - 栗子测评
  • 2025铝合金重力铸造厂家哪家好?温州铝合金铸造厂实力比拼 - 栗子测评
  • 国产家用咖啡机推荐:那些适合家庭的口碑之选 - 品牌排行榜
  • 2025汽车改装卡钳厂家推荐:性能与品质之选 - 栗子测评
  • 有智能功能的家用咖啡机品牌推荐:提升居家咖啡体验 - 品牌排行榜
  • 2025有实力的铝铸造厂家推荐:温州优质的铝铸造厂解析 - 栗子测评
  • 2025苏州AI优化公司推荐盘点 - 栗子测评
  • 家庭全自动咖啡机品牌排行:2025年热门品牌选购参考 - 品牌排行榜
  • 聚焦2025医用隔离电源工厂:品质标杆,守护医疗供电安全 - 栗子测评
  • 2025医用隔离变压器哪家好?这份专业选购指南速看 - 栗子测评
  • 2025年知名的金矿石破碎生产线高口碑厂家推荐(评价高) - 行业平台推荐
  • 2025年质量好的抽水蓄能水电站生产线厂家最新TOP排行榜 - 行业平台推荐