[题解]NOI2018 归程
传送门 咕了好多天了,先是打了离线暴力,后来学克鲁斯卡尔重构树,然后又咕了好久才打完 题目描述 一张 \(n\) 个点, \(m\) 条边的无向图,每条边有一个长度 \(l\) 和一个海拔 \(a\) ,每天会有一个水位线, \(a\) 小于等于水位线的都会被淹没 \(Q\) 个询问: 询问 \(u,p\) :问从 \(u\) 开始走没被淹没的边所能到达的点中,离1号点的最小距离 强制在线 分析 发现把题目转换过来之后好像还真的是个板子题 先考虑离线做法: 从高到低枚举水位线,对于当前的水位线,如果一条道路目前不会被淹没,那么之后也不会被淹没,那么我们可以用并查集维护相互之间走没有被淹没的路可以到达的点集,同一个点集中的点到1要走的路就是点集中的点到1的最小距离 再考虑强制在线: 先跑一遍最短路求出每个点到 \(1\) 的最短距离这个很显然了 可以发现首先需要维护从每个点开始走 \(a\) 值大于 \(p\) 的边所能到达的点,这个可以用克鲁斯卡尔重构树: 按照 \(a\) 从大到构建重构树,那么两个点的 \(LCA\) 就是他们之间最小海拔的最大值,也就是说,不管怎么走,从 \(u\) 到 \(v\) 必然会经过一条海拔小于等于 \(val[LCA(u,v)]\) 的边,那么我们只需要在克鲁斯卡尔重构树上维护每一个点的子树中的所有点到1的距离的最小值。 查询的时候从 \(u\)