1 条题解
-
0
题意概括
给定一个 个点 条边的无向连通图,边权 ,可能有重边。
定义路径的代价为路径上最大边权。
对于 到 的路径,希望找到一条路径使最大边权最小,这个最小值记为 。
有 个询问( 可能达到 ),每次给出 ,求 。
若 则 。
最后输出所有询问的 之和模 。
问题转化
就是 到 的所有路径中最大边权的最小值,即最小瓶颈路(minimum bottleneck path)问题。
在图论中,这等价于求 和 在最小生成树(MST) 上的路径最大边权。
为什么等价于 MST 上的路径最大边权?
定理:在无向连通图中,任意两点 之间的最小瓶颈路的值等于它们在该图 MST 上的唯一路径的最大边权。
简要证明:
- 设 是图的一棵 MST。
- 在 中 到 的路径上最大边权为 。
- 假设存在一条路径 在原始图中,其最大边权 ,那么可以用 中的边替换 中 路径上权值 的某条边,得到更小的生成树,矛盾。
- 所以 就是最小瓶颈值。
算法步骤
-
构建最小生成树
使用 Kruskal 算法(),因为 可行。 -
在 MST 上预处理 LCA 与路径最大值
- MST 有 条边,是树结构。
- 对 MST 做一次 DFS,得到每个节点的深度、父节点、以及到父节点的边权。
- 使用倍增法(binary lifting)预处理:
- : 的 级祖先
- : 到 路径上的最大边权
-
回答询问
- 如果 ,返回 。
- 否则,找 的 LCA,记为 。
- 路径 的最大边权 = 。
- 其中 可以用 在 求出。
-
处理大量询问
可达 , 约 操作,在合理优化下可过。
复杂度分析
- Kruskal:
- DFS + 倍增预处理:
- 每个询问:
- 总复杂度:
- 在 时可行
样例验证
输入:
5 7 1 2 8 2 3 9 3 1 2 3 4 7 1 4 4 3 5 6 1 4 9 10 233 17 66666 19260817步骤 1:构建 MST
边按权值排序: (3,1,2), (1,4,4), (3,5,6), (3,4,7), (1,2,8), (1,4,9), (2,3,9)
Kruskal 过程(用并查集):
- 选 (3,1,2)
- 选 (1,4,4)
- 选 (3,5,6)
- 选 (3,4,7) 会形成环(3-1-4-3)?检查:3-1-4 已经连通,所以跳过。
- 选 (1,2,8)
- 已选 n-1=4 条边,停止。
MST 边:
(3,1,2), (1,4,4), (3,5,6), (1,2,8)步骤 2:回答询问
生成 个询问,用给定随机函数,计算 并求和模 。
样例输出是 32,说明这 10 个询问的 总和为 32。
实现细节
- 注意重边:Kruskal 时权值相同的边顺序任意,不影响 MST 的瓶颈性质。
- 随机数生成时,,可能 ,此时答案 0。
- 模 只在最后求和时用,中间计算用普通整数。
总结
本题核心是最小瓶颈路 = MST 路径最大边权的经典结论,结合 LCA 与路径最大值查询,可以高效处理大量询问。
- 1
信息
- ID
- 4008
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者