2303. 营救

1000ms 256MB 简单
题目描述
在一张由 $n$ 个节点和 $m$ 条无向边构成的图上,每条边都有一个权值 $w$(代表拥挤度/风阻值)。 给定起点 $s$ 和终点 $t$,你需要规划一条从 $s$ 到 $t$ 的路径,使得该路径上所有边中**权值的最大值尽可能小**。请输出这个最小的最大权值。
输入格式
- 第一行包含四个正整数 $n, m, s, t$ ($1 \le n \le 10^4, \quad 1 \le m \le 2 \times 10^4, \quad 1 \le s, t \le n$),其含义见题目描述。 - 接下来 $m$ 行,每行包含三个整数 $u, v, w$ ($1 \le u, v \le n, \quad w \le 10^4$),表示有一条无向边连接节点 $u$ 和节点 $v$,其权值为 $w$。 - 图中可能存在重边(即两个节点之间存在多条边)。
输出格式
- 输出一行一个整数,代表路径上最大边权的最小值。
样例 1
输入 (Input)
3 3 1 3
1 2 2
2 3 1
1 3 3
输出 (Output)
2
- 对于 $30\%$ 的数据,保证 $n \le 10$。 - 对于 $60\%$ 的数据,保证 $n \le 100$。 - 对于 $100\%$ 的数据,保证 $1 \le n \le 10^4$,$1 \le m \le 2 \times 10^4$,$w \le 10^4$,$1 \le s, t \le n$。且数据保证从 $s$ 出发一定能到达 $t$。 - **样例解释**: 从 1 号点去 3 号点,有两条路径: - 路径 1: $1 \to 3$,最大边权为 3。 - 路径 2: $1 \to 2 \to 3$,经过的边权分别为 2 和 1,最大边权为 2。 - 最小的最大边权为 2。 - **算法提示**: 本题是经典的**最小瓶颈路**问题。由于只需要求最大边权的最小值,我们可以借鉴 **Kruskal 最小生成树** 的思想: 1. 将所有边按照权值 $w$ **从小到大**进行排序。 2. 依次遍历排好序的边,使用**并查集(DSU)**将边的两个端点合并。 3. 每次合并后,立即检查起点 $s$ 和终点 $t$ 是否已经连通(即 `find(s) == find(t)`)。 4. 一旦连通,当前加入的这条边的权值 $w$ 就是我们要找的答案,直接输出并结束程序即可。
自测终端 stdin → stdout
输入 stdin
CtrlShiftEnter
输出 stdout

                
错误 stderr

                
CtrlEnter提交
自动保存已开启
操作成功
wzs_oj@kernel:~ — wzs-sh
guest@wzsoj:~$
刷新页面 F5
复制 Ctrl+C
粘贴 Ctrl+V
搜索题目
站点公告
今日神谕
CSP 倒计时
排行榜
我的提交
Esc 关闭 Enter 跳转 支持模糊匹配数字