没脑子的题目。
一眼换根 DP。定义 fi 表示 i 到 i 为根子树中某一个节点的距离最大值;gi 表示 i 经过其父节点到某个节点的距离最大值。那答案就是 max(fi,gi)。
考虑转移。fi 的转移很简单,就是 fi=max{max(valj,fj)+wk|i→j}。这里将 valj 和 fi 取最大值是因为会出现 j 是叶子节点的情况。求 gi 的时候换根 DP 就行了。定义 fai 表示 i 的父亲节点。那么 gi=max(max(valfai,gfai)+wk,max{max(valj,fj)+wk′+wk|fai→j∧fai→i})。前半部分是由父亲直接转移的情况,后半部分是由与 i 同备份的节点转移的情况。用两个变量存最大值和次小值可以 O(n) 求出来,当然也是可以 O(nlogn) 用大根堆乱搞。
Link.
cai
什么课程?
orz
%%%
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!