最小生成树 trick
经常做不出有关求最小生成树的题,而且最近网络赛上出得很多。
一般来说,给一张奇奇怪怪的图求其最小生成树,最简单的情况是模拟 kruskal。较复杂的(比如边数是
下面题目展示了一些图的形态,所求均为该图的最小生成树。
1. P5687 [CSP-S2019 江西] 网格图
一张
的网格图, 与 有边权为 的边, 与 有边权为 的边。求最小生成树。
模拟 Kruskal。把输入的
比如我们当前要处理第
这里的选择是指两端点不连通的边的数量。
首先有一些情况是现在这
- 这是第一次操作。
- 之前进行的操作都是列。
- 之前进行的操作都是行。
剩下的情况是之前既进行过行操作也进行过列操作。例如:
此时
令
列同理不再赘述。
https://www.luogu.com.cn/record/175093830
2. [ABC364F] Range Connect MST
3. [ABC352E] Clique Connect
图中最初没有边。
次操作,给定一个集合 。对于每一对在 中且 的顶点 。在 和 之间添加一条权重为 的边。求最小生成树。
边很多。
我们考虑 Kruskal 的做法,是将所有边按照边权排序,然后从小到大处理每条边。这意味着如果真的暴力建图并将边权排序的话,第
优化边的数量后,跑朴素 Kruskal 即可。
4. [ABC355F] MST Query
图中最初没有边。
次操作,给定 ,对于所有 ,在点 和点 之间添加一条权重为 的边。求最小生成树。
仍然模拟 Kruskal。我们将所有操作离线,然后按照
操作
首先
我们考虑
同理继续处理
所以我们得到,若
;- 或
。
所以我们需要快速求出
https://www.luogu.com.cn/record/175172388
5. MX 模拟赛 数字生成树( 部分分)
给定一张图,求最小按位或生成树。如其名称,所求的生成树需满足所有边权的按位或和最小。
这题跟 Kruskal 没关系。
按位或和最小,我们可以从高到低枚举每个二进制位,判断这个答案的这个二进制位能否为
如果这一位是
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现