给出一棵树,树上每个节点都有一种颜色,求所有颜色相同的节点两两之间距离的总和。
想来写题解主要是看了一下官方解法都写的需要“重心分解”,应该是对应中文语境下的树的点分治。实际上点分治写起来很费事,可以用启发式合并替代。
具体来说,dfs时每个节点都维护一个数据结构(平衡树线段树都可以)用来统计子树下各个颜色节点的数量,维护时启发式合并即可,缺点是复杂度应该是两个logn的。
为了统计答案,除了维护节点数量还需要一边统计他们的深度之和。
代码链接(用小号打的hhh)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步