【BZOJ4771】七彩树

题解:

首先扯一些并没有用的

如果问题是在序列上的怎么做

跟bzoj那道超级钢琴的加强版要求数字不同那个原理一样

主席树扫描过去 找到同一种颜色的前驱 这一段+1就可以了

扩展到树上

如果求链上的颜色个数,套上树剖和序列就一样了

另外找前驱在树上是不能用一个数组记录的

所以也得用主席树实现(维护每个颜色上一次出现的位置)

另外如果是查询子树颜色个数在线

我们可以用dfs序把树变序列

然后跟上面一样

如果离线

直接线段树启发式合并

然后回到这道题。。

上面的方法应该一个都不行(至少我不会)

不过正解也是很简单的

既然考虑每个点的子树不可行

我们可以考虑每个点对哪些点的子树有贡献

于是算法就出来了我们可以对每个点分开做

然后树链求并(我好像只会用虚树来求)

现在这题加了一个限制

线段树修改改成主席树就好了

猜你喜欢

转载自www.cnblogs.com/yinwuxiao/p/9125343.html
今日推荐