题目大意
有 $k$ 棵树,每棵树有 $n$ 个点,对于所有的点对 $(s,t)$($1 \leq s,t \leq n$),求出有多少个点在每棵树的 $s$ 到 $t$ 的链上都存在。
(以防表述不清,给一下传送门
$n,k \leq 500$
2s
题解
一开始怎么想都是 4 次方的复杂度,尝试了暴力+bitset 也 T 了。
这题的关键是要注意到一个性质:在一棵树上,$x$ 到 $y$ 经过 $c$,等价于 $dis_{x,y}=dis_{x,c}+dis_{c,y}$。
而且 $dis_{x,y}$ 是小于等于 $dis_{x,c}+dis_{c,y}$ 的。
那么 $x$ 到 $y$ 在所有树上都经过 $c$,就等价于 $\sum dis_{x,y}=\sum dis_{x,c}+\sum dis_{c,y}$。
那么就 $O(kn^2)$ 预处理 $\sum dis_{x,y}$,然后 $O(n^3)$ 枚举点对与中间点,判断合不合法。
代码
1 |
|