图论 —— 生成树
【概述】
对一个具有 n 个点的连通图进行遍历,对于遍历后的子图,其包含原图中所有的点且保持图连通,最后的结构一定是一个具有 n-1 条边的树,通常称为生成树。
在生成树问题中,最常见的问题就是最小生成树问题,所谓最小生成树,就是对于一个有 n 个点的无向连通图的生成树,其包含原图中的所有点,且保持图连通的边权总和最少的边。
简单来说,对于一个有 n 个点的图,边一定是大于等于 n-1 条的,最小生成树,就是在这些边中选择 n-1 条出来连接所有的 n 个点,且这 n-1 条边的边权之和是所有方案中最小的。
最小生成树具有以下两条性质:
- 切割性质:连接点 x、y 的边权最小的边必定被生成树包含
- 回路性质:任意回路/环上的边权最大的边必不被生成树包含
求最小生成树一般有 Prim 算法与 Kruskal 算法,其中,Prim 算法时间复杂度为 O(V*V),与图中边数无关,适合稠密图;Kruskal 算法时间复杂度 为O(ElogE),需要对图的边进行访问,适合稀疏图。
【常见问题模型】
在生成树问题中,除了最常见的最小生成树问题外,还有以下常见的问题模型:
【例题】
1.最小生成树
- 还是畅通工程(HDU-1233)(Prim):点击这里
- Jungle Roads(HDU-1301)(Prim):点击这里
- Eddy's picture(HDU-1162)(Prim):点击这里
- 最短网络(信息学奥赛一本通-T1350):点击这里
- 繁忙的都市(信息学奥赛一本通-T1392)(Prim):点击这里
- 最优布线问题(信息学奥赛一本通-T1349)(Prim):点击这里
- 继续畅通工程(HDU-1879 )(Kruskal):点击这里
- Constructing Roads(HDU-1102)(Kruskal):点击这里
- 局域网(信息学奥赛一本通-T1391)(Kruskal):点击这里
- 联络员(信息学奥赛一本通-T1393)(Kruskal):点击这里
- 连接格点(信息学奥赛一本通-T1394)(Kruskal):点击这里
- 城市公交网络建设问题(信息学奥赛一本通-T1348)(Kruskal):点击这里
- Pseudoforest(HDU-3367)(Kruskal):点击这里
- Connect the Cities(HDU-3371)(Kruskal):点击这里
- Building Roads(POJ-3625)(预处理+Prim):点击这里
- Built?(AtCoder-2643)(Kruskal+贪心):点击这里
- Find the most comfortable road(HDU-1598)(最大生成树+贪心):点击这里
- Applese 的大奖(2019牛客寒假算法基础集训营 Day4-G)(限制条件下的最小生成树):点击这里
2.曼哈顿距离最小生成树
- 扩散(洛谷-P1661)(朴素的曼哈顿最小生成树+最长边):点击这里
同题:扩散(信息学奥赛一本通-T1437):点击这里 - Object Clustering(POJ-3214)(曼哈顿最小生成树+第k大的边):点击这里
3.次小生成树
- The Unique MST(OpenJ_Bailian-1679)(次小生成树):点击这里
- Qin Shi Huang's National Road System(HDU-4081)(次小生成树思想):点击这里
4.最小树形图
- Command NetWork(POJ-3164)(定根的最小树形图):点击这里
- Ice_cream’s world II(HDU-2121)(超级源点的使用):点击这里
- Road Repairs(CF-240E)(路径的输出):点击这里
5.最小瓶颈生成树
- Out of Hay(POJ-2395):点击这里
6.增量最小生成树
- Trail Maintenance(LightOJ-1123):点击这里
7.最小瓶颈路
- 营救(洛谷-P1396)(单次查询):点击这里
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效