闲扯
这道题也是比较套路的,在之前[APIO2018] Duathlon 铁人两项的基础上,我们可以比较快的找到思路。
题面
Solution
由于是求任意两点间的简单路径的问题,我们考虑建出原图的圆方树。
在铁人两项这道题里面,我们用到了一个结论,根据这个结论,我们可以知道:
当固定 $u,v$ 时,在圆方树上 $u,v$ 的路径上的所有方点周围的圆点我们都能够走到。
我们定义方点的权值为它周围所有圆点的权值的最小值。
那么我们用树剖维护链上所有方点的最小权值即可。
那么修改呢?
如果修改点 $u$ ,我们把所有和它相连的方点都改一遍,很容易卡到 $O(n)$ 。
我们可以利用树的性质,只记录每个方点的子节点中的权值,这样修改就唯一了。
然后查询时,如果最上面是方点,那么还要考虑它的父节点的权值;如果是圆点,那么还要考虑它自己的权值。
Code
1 |
|