$Problem’s$ $Website$
(没有权限查看题目的同学不要打我)
这是一道经典题,我们首先用类似链剖分的方法求一个dfs序,将树上问题转化为线性问题,用两个数组记录每一棵子树起始的dfs序和终止的dfs序,然后处理每个赋颜色的操作,记录每个操作最后一个起始子树的dfs序(因为可能重复赋值),然后将所有子树按照终止子树的dfs序升序排序,维护一个类似指针的东西,表示当前的颜色,先枚举子树根,如果当前颜色起始的dfs序在这棵子树中,就在那个位置$+1$,如果这种颜色有重复赋值,我们就在它上一个赋值的位置$-1$,最后对于每个子树区间,树状数组加一下就是答案,有点像 差分前缀和 。
$Code$
1 | //Coded by dy. |
$rp++$