首页 > 代码库 > BZOJ 3626 LCA(离线+树链剖分)

BZOJ 3626 LCA(离线+树链剖分)

首先注意到这样一个事实。

树上两个点(u,v)的LCA的深度,可以转化为先将u到根路径点权都加1,然后求v到根路径上的总点权值。

并且该题支持离线。那么我们可以把一个区间询问拆成两个前缀和形式的询问。

现在问题就变成了求[1,r]和x的LCA深度之和。实际上就是把[1,r]到根路径点权点1,然后求x到根路径上的总权值。

我们按编号从小往大依次加路径点权。然后就可以有序处理询问。用树链剖分维护的话,总复杂度为O((n+q)lognlogn).

 

BZOJ 3626 LCA(离线+树链剖分)