一开始的想法是枚举路径的 \(\rm LCA\) 然后再枚举两边的深度,但是这样无论如何我都只能做到 \(O(n ^ 3)\) 的复杂度. 只能考虑换一种方式计数,注意到点分治可以解决树上一类路径问题,于是我们考虑使用类似点分治的方式对树上路径计数. 具体地,我们考虑计算以 \(i\) 为端点的路径数量,那么就会存在两种路径:向上走的和向下走的,分别令其为 \(f, g\). 因为深度相同的点都是等价的,因此我们将状态设置为: \(f_{i, j}\) 表示从 \(i\) 开始往上长度为 \(j…