[CF786B]Legacy

Legacy

题解

看到题目应该是容易想到最短路的,但是由于区间到单点与单点到区间的边我们需要想些办法来维护。

于是,我们就想到了通过虚点来进行维护。但总不能每个区间都建一个点,只能利用线段树来对各个区间的虚点进行维护。

针对一个区间需要建两个点,一个入点,一个出点。将大区间与小区间连上边,出边从下往上,入边从上往下,其边权都是0。

由于大小区间内已经连了边,再加上最短路的性质,懒标记什么的就没必要了。最后建完边后再去跑一边Dijkstra即可,注意需要加堆优化。

由于n,q\leq 10^5,边数m应该不超过(n+q)log_{n},总时间复杂度O\left( (n+q)\log^2 n\right ),能卡过去。

源码

#inc
posted @ 2020-08-23 16:10  StaroForgin  阅读(6)  评论(0)    收藏  举报  来源