[NOI2018]归程

归程

题解

挺好想的一道题

很容易想到,由于一辆车只能在没有积水的路面上行驶,答案就是它所在的连通块中所有点距1号节点的最小值。

如果每次询问都来缩一次点的话明显会T掉,而它每次询问的积水线又是不同的,我们考虑如何维护连通块的海拔。 

由于海拔越高能满足的肯定越多,我们就想到了通过海拔构建一棵最小生成树,当查询为(p,v)时就是查询大于p海拔的路构成的生成树上点v所在的联通块的最小距点1的距离。很明显,如果可以离线下来做的话这个问题很快就解决了,可是它又要求强制在线,考虑如何在线维护并查集。

可持久化的并查集明显是个很好的选择,但是笔者并没有打可持久化并查集。我们可以在连接两个节点祖先的并查集时建一个新点,其点权为当前边的海拔,作为这两个节点祖先的父亲。很容易发现,在我们连接得到的这棵二叉树上,从叶子节点到祖先节点的路径上,点权是递减的。我们可以通过倍增维护一条路径上的点

posted @ 2020-10-25 10:29  StaroForgin  阅读(9)  评论(0)    收藏  举报  来源