Problem
Tree
Description
给你一棵树以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于
Input
() 接下来行边描述管道,按照题目中写的输入 接下来是
Output
Sample Input
1 | 7 |
Sample Output
1 | 5 |
标签:点分治
Solution
点分治板题。
对于每个点,我们计算穿过它的路径的条数。
这个值等于它的子树中所有深度之和小于的点对数,可以双指针搞一搞。
但这样两个在同一儿子内的点对会算重,所以需要减去它的每个儿子的子树中深度之和小于的点对数,其中为它到此儿子的距离。这也可以双指针搞一搞。
对于每次分治,我们都要找到当前子树的重心,以保证复杂度为。
Code
1 |
|