题目链接:
戳我
题目描述:
在2077年,CS市已经不使用公路了,而是通过“环路”系统让各个地区实现连通,每一条环路都是双向的并且有一个固定的速度。这一天,PIPI驾驶着他的Tesla Model SSS准备从地区A开往地区B,相比于缩短时间,PIPI更希望在驾驶过程中行驶速度保持稳定,即行驶过程中最高速度和最低速度的差值越小越好(因为突然地提速/减速确实会让PIPI的驾驶体验很差)。
输入:
第一行输入CS市中的地区数量N和环路数量M(2≤N≤500 ,1≤M≤2000)。
接下来M行输入每条环路的起点s, 终点t, 速度speed 以及长度 len (1≤s,t≤N, s≠t, 1≤speed, len≤1e5)。
接下来一行输入一个整数Q,代表有Q次询问(1≤Q≤10)。
接下来Q行每行输入两个数字 u, v,代表PIPI想从地区u开往地区v(1≤u,v≤N)。
输出:
对于每个询问,输出PIPI行驶过程中最高速度和最低速度的差值。如果无法到达,则输出-1。
样例输入:
4 4
1 2 2 1
2 3 4 2
1 4 1 3
3 4 2 4
2
1 3
1 2
样例输出:
1
0
样例示意图:
题目思路:
我们先把所有的边按速度权值从小到大排列,然后我们枚举每条边,以这条边为起边,再枚举这条边后边的权值比它大的边(同时要合并这条边联结的两个点),直到枚举到了一条边之后,起点和终点联通了,说明这两条边可以联通这条路,就可以用后面的速度权值大的边-速度权值小的边了。
c语言参考代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX 501
#define INF 0x3f3f3f3f
int n,m;
int parent[MAX];
typedef struct{
int x,y;
int v,w;
}Edge,*edge;
Edge map[2001];
int min(int x,int y)
{
<