min(a[u],a[v])*dis(u,v)
这个式子带min函数,dis函数,都比较麻烦,肯定需要化简的。
trick:
- dis(u,v)可以引入LCA,转化成
dis(1,u) + dis(1,v) - 2*dis(1,LCA)
- 对于min函数的处理,我们可以分类讨论,在rt子树中,把点权大于等于a[rt]的节点分为一类,小于a[rt]的节点分一类
- 于是可以把式子写成:
对于
a x 1 , a x 2 , . . . a x c n t 1 > = a u a_{x1},a_{x2},...a_{xcnt1} >= a_{u} ax1,ax2,...axcnt1>=au
贡献为:
a u ∗ ( d e p [ a u ] + d e p [ a x 1 ] − 2 ∗ d e p [ L C A ] ) a_{u}*(dep[a_{u}]+dep[a_{x1}]-2*dep[LCA]) au∗(dep[au]+dep[ax1]−2∗dep[LCA])
+ a u ∗ ( d e p [ a u ] + d e p [ a x 2 ] − 2 ∗ d e p [ L C A ] ) +a_{u}*(dep[a_{u}]+dep[a_{x2}]-2*dep[LCA]) +au∗(dep[au]+dep[ax