把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

小trick

基本算法

求无序数组(不可排序)的前驱和后继(比当前值小)

Sol1

考虑离线使用 stack 来进行维护。

顺序遍历的时候,求的是 \(i\) 之前能否到达 \(i\),不能就标记数组 right[sta.top()] = i,容易证明只是所能到达的最远。

倒序遍历同理。

时间复杂度 \(\mathcal{O}(n)\),是一个离线算法(预处理)。

Sol2

用并查集。

首先找到最大值,然后找到次小值,然后看这个值跟旁边的关系,考虑是否跟他旁边的进行并查集合并,这里也是用到了跟单调栈可以延伸的性质(可以传递)。

图论重构图

Sol1

可以通过分层图设 dp 状态(适用于无向或者有向图,但后者可以缩点之后变成 DAG,性质显然更多),跑 Dij 得到最优解。

Sol2

通过题目的一些性质,进行拆点,并把边看成点相连,跑 Dij 得到最优解。

posted @ 2025-04-22 20:26  high_skyy  阅读(7)  评论(0)    收藏  举报
浏览器标题切换
浏览器标题切换end