P r o b l e m \mathrm{Problem} Problem
题意:
给一棵N个节点的无根树,每个节点有一个颜色属性c。
对于每个颜色,求经过这种颜色的简单路径的数量。
S o l u t i o n \mathrm{Solution} Solution
假设我们对每一个颜色分开单独考虑。
我们令 s u m [ i ] sum[i] sum[i]表示我们在树上已经枚举到的过程中,所有颜色为 i i i的子树的总大小。
对于某一节点的每一个子树,找到每一个颜色相同的,之间相隔的点两两可以形成不包含该颜色的路径,用总方案数减去这些方案数即可。
如图,我们用 s i z e [ y ] − t size[y]-t size[y]−t来得到可两两相连的路径。
至于t的求解我们可以通过原来的 s u m [ x ] sum[x]