给出一棵树,树上每个节点都有一种颜色,求所有颜色相同的节点两两之间距离的总和。
想来写题解主要是看了一下官方解法都写的需要“重心分解”,应该是对应中文语境下的树的点分治。实际上点分治写起来很费事,可以用启发式合并替代。
具体来说,dfs时每个节点都维护一个数据结构(平衡树线段树都可以)用来统计子树下各个颜色节点的数量,维护时启发式合并即可,缺点是复杂度应该是两个logn的。
为了统计答案,除了维护节点数量还需要一边统计他们的深度之和。
代码链接(用小号打的hhh)