Description
删除两条边,将树分成三个连通块 A , B , C A,B,C A,B,C,贡献为连通块点权和之积
删去一条边,问再删去任意一条边后的贡献和
Solution
考虑预处理出所有答案
先将边下放到子节点
O ( n 2 ) O(n^2) O(n2) 做法:
枚举删除的任意两条边,算出贡献,累加到两条边上
考虑优化
发现删去一条边后,再删第二条边时,对于很多情况,都会有一个连通块不变,考虑剩下连通块的贡献一起算,再乘上这个连通块的贡献
分类讨论
定义 s u s_u su 为子树 u u u 的点权和
- 删的第二条边在子树内
贡献为
( s 1 − s u ) ∑ v ∈ s o n u ( s u − s v ) s v = ( s 1 − s u ) ∑ v ∈ s o n u ( s u s v − s v 2 ) = ( s 1 − s u ) ( s u ∑ v ∈ s o n u s v − ∑ v ∈ s o n u s v 2 ) ) (s_1-s_u)\sum_{v\in son_u}(s_u-s_v)s_v\\ =(s_1-s_u)\sum_{v\in son_u}(s_us_v-s_v^2)\\ =(s_1-s_u)(s_u\sum_{v\in son_u}s_v-\sum_{v\in son_u}s_v^2)) (s1−su)v∈sonu∑(su−sv)sv=(s1−su)v∈sonu∑(susv−sv2)=(s1−su)(suv∈sonu∑sv−v∈sonu∑sv2))
将 s s s 做子树和,平方的子树和, O ( n ) O(n) O(n) 统计贡献
- 删的第二条边在到根的路径上
贡献为
s u ∑ v ∈ r o a d 1 , u ( s 1 − s v ) ( s v − s u ) = s u ∑ v ∈ r o a d 1 , u ( s 1 s v − s 1 s u − s v 2 + s u s v ) = s u ( s 1 ∑ v ∈ r o a d 1 , u s v − ∑ v ∈ r o a d 1 , u s 1 s u − ∑ v ∈ r o a d 1 , u s v 2 + s u ∑ v ∈