[NOI2018]归程
归程
题解
挺好想的一道题
很容易想到,由于一辆车只能在没有积水的路面上行驶,答案就是它所在的连通块中所有点距号节点的最小值。
如果每次询问都来缩一次点的话明显会T掉,而它每次询问的积水线又是不同的,我们考虑如何维护连通块的海拔。
由于海拔越高能满足的肯定越多,我们就想到了通过海拔构建一棵最小生成树,当查询为时就是查询大于
海拔的路构成的生成树上点
所在的联通块的最小距点
的距离。很明显,如果可以离线下来做的话这个问题很快就解决了,可是它又要求强制在线,考虑如何在线维护并查集。
可持久化的并查集明显是个很好的选择,但是笔者并没有打可持久化并查集。我们可以在连接两个节点祖先的并查集时建一个新点,其点权为当前边的海拔,作为这两个节点祖先的父亲。很容易发现,在我们连接得到的这棵二叉树上,从叶子节点到祖先节点的路径上,点权是递减的。我们可以通过倍增维护一条路径上的点