题目:
试题 G: 网络稳定性
时间限制: 1.5s 内存限制: 256.0MB 本题总分:20 分
【问题描述】
有一个局域网,由 n 个设备和 m 条物理连接组成,第 i 条连接的稳定性为w i 。
对于从设备 A 到设备 B 的一条经过了若干个物理连接的路径,我们记这条路径的稳定性为其经过所有连接中稳定性最低的那个。
我们记设备 A 到设备 B 之间通信的稳定性为 A 至 B 的所有可行路径的稳定性中最高的那一条。给定局域网中的设备的物理连接情况,求出若干组设备 x i 和 y i 之间的通信稳定性。如果两台设备之间不存在任何路径,请输出 −1 。
【输入格式】
输入的第一行包含三个整数 n,m,q ,分别表示设备数、物理连接数和询问数。
接下来 m 行,每行包含三个整数 u i ,v i ,w i ,分别表示 u i 和 v i 之间有一条稳定性为 w i 的物理连接。
接下来 q 行,每行包含两个整数 x i ,y i ,表示查询 x i 和 y i 之间的通信稳定性。
【输出格式】
输出 q 行,每行包含一个整数依次表示每个询问的答案。
【样例输入】
5 4 3
1 2 5
2 3 6
试题G: 网络稳定性 11
第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组
3 4 1
1 4 3
1 5
2 4
1 3
【样例输出】
-1
3
5
【评测用例规模与约定】
对于 30% 的评测用例,n,q ≤ 500,m ≤ 1000 ;
对于 60% 的评测用例,n,q ≤ 5000,m ≤ 10000 ;
对于所有评测用例,2 ≤ n,q ≤ 10 5 ,1 ≤ m ≤ 3 × 10 5 ,1 ≤ u i ,v i , x i ,y i ≤ n,
1 ≤ w i ≤ 10 6 ,u i , v i ,x i , y i 。
关于这个题的思路,贪心+并查集。
我们将所有边的权重从大到小排序,然后从大到小遍历所有边。如果新加入的边使得u,v俩点连通了,那么u,v俩点的连通性就是
这条边。 现证明贪心思路,先证明这条边是路径最小,因为在连上这条边之前俩点没有路径,连了之后就有路径了,说明u,v的第一条路径一定过这条边,而我们又是从大到小遍历的,所以这条边一定是这条路径最小的边。其次证明这条边是所有其他路径最小边 最大的那个,这个很容易证明,因为如果还有其他路径的话,其他路径的边肯定都小于这条边。
我们这道题可以先储存起来询问,vector
对于每一个询问 存储query[x].push_back({y,i}),query[y]
在做并查集的时候,如a-b这条边,取出