分层图总结
分层图定义
分层图,顾名思义,是许多张图一层一层堆叠在同一维度内。如果把一张普通的图定位一层楼,那么分层图就是由许多层楼叠起来的一栋楼。而连接每一层图的边,就相当于一栋楼里的楼梯。
那么,分层图一般用来干什么呢??
当我们遇到这类题:
给你n个点,m条边,每条边都有边权。现在你可以任意选择k条边,使它的边权为0。问从起点到终点的最短路。
在这时,我们就可以通过构建分层图来求解。具体见下文。
分层图实现
分层图的实现主要就难在建图,剩余的就和普通的图没什么区别了。
分层图建图
个人认为,分层图建图的思想类似于扩展域并查集,即:假设一共要建
k
k
k层图,那么我们就开一个
k
×
n
k \times n
k×n的数组,每
n
n
n个位置存一层图的点,一共分
k
k
k层。具体见下图:
此时,第
i
i
i层的点的下标为
1
+
(
i
−
1
)
×
n
∼
n
+
(
i
−
1
)
×
n
1 + (i - 1) \times n \sim n + (i - 1) \times n
1+(i−1)×n∼n+(i−1)×n。具体见图见
c
o
d
e
code
code:
分层图最短路
图建好后,剩下的就是正常的跑最短路了。但是,有一点需要注意:不见得最优答案会产生在第k层图中。也就是,不见得会跑到第k层图中。
什么时候会出现这种情况呢?当 m < k m < k m<k的时候。假设 m = 1 , k = 10 m = 1, k = 10 m=1,k=10,我们只有一条边,也就是说,我们最多建两层图。那么遇到这种情况该怎么办呢?
- 可以在每一层的终点处向下一层的终点处连一条边
- 可以在统计答案的时候在每一层中取最小值
两种方法任选即可。
具体见例题。
分层图例题
板子题,套代码即可。
A C c o d e AC code ACcode:
板子题推荐:
luogu P2939 Revamping Trails G
__EOF__

本文链接:https://www.cnblogs.com/best-brain/p/18006576.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效