P4211 [LNOI2014]LCA
给你一颗n个点的树,有q次询问,每次询问一个 区间内的点到z的lca深度和。
思路就是看上去像是一个二维问题,但是这个东西又不好维护,所以我们考虑交换枚举顺序讨论贡献,首先深度这个东西我们可以理解为该点到根节点经过的点数,然后现在我们将深度拆开了,然后考虑每个点的贡献,那么这个点的贡献等于在它下面的lca个数,然后如果一个点是两个点最近公共祖先的祖先,那么它一定是两个点的公共祖先。
所以问题转化为求解一些点和z的公共祖先个数,那么我们发现实际上就是他们两个点到根的链的交集长度,那么我们可以对其他点链加1,然后最后对z询问到根的链权值和。
然后这样复杂度还不对,因为有q次询问,但是我们可以考虑将询问离线,就可以将问题转化为2q次询问前缀,那么就可以排序后一遍处理了。离线思想
不得不说这道题的确是一道好题,所有这种类似公共问题,都有一个性质就是只需要找到关键的公共点即可,类似的有最大公因数,最长公共前缀。