注意到对于一个集合 $S$。$min(S)$,$mex(S)$ 恰好有一个为 $0$ 另一个大于 $0$。

故对于 $min(Path(u,v))+mex(Path(u,v))$ 计数等价于对于 $min(Path(u,v))$ 与 $mex(Path(u,v))$ 分别计数,然后去除 $0$ 的计数即可(由上述性质可知 $min + mex > 0$)。

min

对于 $min$ 的计数,我们考虑从大到小依次加入节点,其会连接起若干个连通块 $B_i$,形成一个更大的连通块 $A$。

令 $sz(S)$ 表示联通块大小,那么最小值为当前新加入节点编号 $u$ 的路径数等于 $A$ 连通块内路径跨越 $u$ 节点的点对数,算式如下,简单,不做解释。

$$
\binom{sz(A)}{2} - \sum \binom{sz(B_i)}{2}
$$

时间复杂度 $O(n)$。

mex

直接求 $mex$ 并不好操作。考虑一件事情,对于一条 $mex$ 等于 $w$ 的路径,其必包含 $[0,w-1]$ 中的所有数,而不包含 $w$。

记 $cnt(w)$ 表示包含 $[0,w]$ 中的所有数的路径数。

那么 $mex$ 为 $w$ 的路径数即为 $cnt(w-1) - cnt(w)$。

考虑如何求出 $cnt$。

我们类似双指针记录路径 $Path(u,v)$,初始为 $Path(0,0)$,表示最短的包含 $[0,w]$ 所有数的路径,$w$ 初始为 $0$。

$cnt(0)$ 是可以算出来的,但是我们不需要。

考虑如何从 $w-1$ 的路径推出 $w$ 的路径。

记 $tu=lca(u,w)$,$tv=lca(v,w)$。

  • 若 $tu=0$ 且 $tv=v$ 则令 $v’=w$。
  • 若 $tv=0$ 且 $tu=u$ 则令 $u’=w$。
  • 若 $tu \not= w$ 且 $tv \not= w$,没有合法路径,退出。
  • 否则,不需要改变双指针。

建议画图理解每一步的具体含义。

那么 $cnt(w) = sz(u) * sz(v)$,其中 $sz$ 表示子树大小。

需要特殊判断的是 $u=0$ 或 $v=0$ 时,这里以 $u=0$ 举例:

令 $fv$ 为 $v$ 的非根最早祖宗。

$cnt(w) = sz(fv) \times (n - sz(fv))$

这一部分很不幸的找到原题 CF1527D,非常抱歉,题解与标程的这一部分也使用了此原题的做法以替换原来的答辩做法。

时间复杂度 $O(n\log n)$。

结语

总时间复杂度 $O(n\log n)$。

至此,我们分别统计出了 $min$,$mex$ 的答案,简单相加即可。

  • 记得开 long long
  • 边数组记得两倍
  • 小心 lca

本题码量稍大,建议使用更优秀的实现方式。