题面:http://acm.hdu.edu.cn/showproblem.php?pid=2376
题意:计算树上任意两点距离和的平均值。
解法:树形dp
这是一个简单基础经典的树形dp。
我们考虑计算每条边的贡献,对于一条边u->v假设u的一侧有m个结点,v的一侧有n个结点,那么这两边的结点要想互通,必然要经过这一条边,所以这一条边的贡献就是m乘以n。
所以我们只需要一遍dfs,计算出每条边的贡献和即可。
具体来说,我们需要记录每个结点为根的子树所含结点i个,那么另一侧的结点个数必然是n-i个,每次相加即可。
我们把所有边的贡献求总和,再除以总路径数N * (N - 1) / 2,即为最后所求。
1 |
|
v1.5.2