专心OI - 找祖先

题目链接:https://www.luogu.org/problem/P5002

 

题解:

假设我们找到点u

1.这些点对不跨越u,即其中有一个点一定是u

\[ans1 = 2 \times size\left[ u \right] - 1\]

 

2.这些点不跨越u

u的所有子树的大小相乘即是答案。w为子树个数。

\[ans2 = \sum\limits_{i = 1}^w {\sum\limits_{j = 1}^w {size\left[ {son\left[ i \right]} \right]} } \times size\left[ {son\left[ j \right]} \right] - \sum\nolimits_{i = 1}^w {size\left[ {son\left[ i \right]} \right]} \]

 

我们发现并不需要枚举两个儿子,另一个可由父亲的大小推出

简化上式可得

\[ans2 = {\left( {size\left[ u \right] - 1} \right)^2} - \sum\limits_{i = 1}^w {size\left[ {son\left[ i \right]} \right]_{}^2} \]

 

相加得解

\[ans = size{\left[ u \right]^2} - \sum\limits_{i = 1}^w {size\left[ {son\left[ i \right]} \right]_{}^2} \]

 

然后随便做。。。

 

posted @ 2019-08-07 19:21  MXR_alone  阅读(122)  评论(0编辑  收藏  举报