洛谷 P2664 树上游戏 题解
题目传送门 题目大意: 求出所有的 s u m i = ∑ j = 1 n s ( i , j ) sum_i=\sum_{j=1}^n s(i,j) s u m i = ∑ j = 1 n s ( i , j ) ,其中 s ( i , j ) s(i,j) s ( i , j ) 表示 i i i 到 j j j 的路径上有多少种不同的颜色。 题解 树上的路径的统计类型的题目肯定是用点分治来搞嘛。对于当前分治到的一颗子树,我们考虑统计所有子树内经过重心的路径所产生的贡献。 为了方便,先定义几个东西: c o l [ i ] col[i] c o l [ i ] 表示节点 i i i 的颜色 v a l [ i ] val[i] v a l [ i ] 表示 i i i 这种颜色给重心带来的贡献 s i z e [ i ] size[i] s i z e [ i ] 表示以 i i i 为根的子树的大小 r o o t root r o o t 表示重心 那么我们在从重心遍历下去的过程中,对于遍历到的一个点 x x x ,假如这个点的颜色在它到重心的路径上是第一次出现,那么我们让 v a l [ c o l [ x ] ] val[col[x]] v a l [ c o l [ x ] ] 加上 s i z e [ x ] size[x] s i z e [ x ]