0%

LOJ3046 「ZJOI2019」语言

Sol

考虑对每个点算出能够与它进行贸易活动的点数,也就是到它的路径被那 $m$ 条路径中的某一条完全包含的点数。

对原树进行链分治(重链剖分),这样每条路径最多会经过 $\log n$ 条链。

对每条链考虑,经过了它的路径长这样:

黑色代表那条链,其它每种颜色代表了一条路径。

对于这条链上的一个点,它能进行贸易的点数实际上就是:那些左端点在这个点左侧、右端点在这个点右侧的路径,它们的端点的虚树大小。

对链上的点扫描线,并动态维护满足条件的路径的虚树大小即可。

复杂度 $O(n\log ^ 2 n)$ 。

Code

link