[NOI2018]归程
这题我只会离线做法..在线做法的克鲁斯卡尔重构树我虽然会但是…我不会倍增…所以就比较困难,于是暂时先只写了离线做法.
这个题其实是一个动态的图上的最短路问题.
从$1$号点开始跑一遍 Dijkstra,求出到每个节点的最短路
然后问题就转化成了在开车能到达的点里选择一个dis最小的点
开车能到达的点用克鲁斯卡尔重构树来维护,每次要查询的就是
重构树上对应合并节点的子树节点中的dis最小值,寻找对应节点用树上倍增解决
子树dis最小值随便搞一搞都可以.当然这是正解做法.
而离线做法就不需要重构树,只需要把询问排一下序.
然后根据海拔的单调性用加权并查集维护答案就行了.
$Code:$
1 | /* |