Processing math: 100%

「2023 集训队互测」举办乘凉州喵,举办乘凉州谢谢喵

一个询问 (u,v),假设两个点的 lcac。考虑差分,发现答案可以拆成 1u 链的答案 + 1v 的答案 - 1c 的答案 ×2 + cc 的答案。

单点的答案很好处理,离线下来点分治,或者写一个点分树。

因此现在只需要处理每个点到 1 的各类答案。

考虑离线处理,很明显可以重链剖分,拆成若干个重链,重链要算的是重链上所有轻儿子的答案。

发现这样会算多,就是在走轻边的时候,下面那个子树已经算过了,但又算了一遍,要减去这个子树的答案,这个可以写一个线段树合并继续离线处理。

然后最后是算从链首开始的一段树链的轻儿子的答案,这个可以离线下来 dsu 算。

然后就做完了。

posted @   Reanap  阅读(290)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示