题解 P3676 【小清新数据结构题】
感觉最小清新的其实是这个数据结构题啊,链剖直接暴力讨论一波就艹过去了好气啊,下面来讲一种比较容易work全是板子的
首先我们发现有一个良心30分部分分,每次询问根都为1,这个要怎么搞呢?
我们的要求就是把一个点到根的路径上的子树和全部加上一个值,询问所有点子树平方和。
考虑对一个点x点权+y对答案的贡献,我们发现对于每个x的父亲f,假设原来点权和为p,现在就变成了p+y,那么对答案贡献就是
那么我们只要支持将一个点到根的路径点权加上一个数和统计一个点到根的点权和,直接树链剖分就可以做到两个log,当然如果你追求理论复杂度那么用lct就可以做到一个log。
现在考虑满分,我们发现这个平方十分麻烦,不妨考虑如果没有平方怎么做,即要以点p为根考虑整棵树,求出每个点子树的点权和,直接加在一起。
考虑一个点s的点权
现在问题就是这个平方,我们设
证明十分简单,考虑对于每对点(i,j),在i到j的路径上每条边都加上
那么我们在1为根的时候求出