题目链接
题目大意
给你一棵树,有两种操作,第一种是子树权值加,第二种是给你不超过五条链,让你求这些链的并集的权值和,这些链都是某个节点到根的一段,点数和询问数均$\le 200000$
做法
首先这种求链的权值和的题目肯定是要树链剖分的,子树加应该也是基础操作了。
那么怎么来求这5条链的交呢?去网上的题解看看大多都是LCA搞搞,细节可能会比较的多。
博主这里提供一个别样的思路。
我们树链剖分事实上就是把我们要求的那条链分解成不超过log段,dfn连续的区间,然后在线段树上查询对吧。
那么我们这里对这五条链也一样处理,在线段树上做区间置,表示这几段的值是我要的。由于是区间置,所以就自动去重了。
最后再查询一下就好了。
具体实现的话可以看代码。
代码
1 |
|