最短路问题,虽然只有1e4条边,但是点的下标太大了,考虑离散化最短路,记这m条边最小和最大的点的下标为mi和mx,则1到mi和mx到n都不能传送只能花费时间,将问题转化成从mi开始到mx的最短路问题,将每边的u,v都放进离散化数组,离散化后建边(除了传送,还要和相邻的点建边花费为坐标差)。最后跑一遍最短路即可
#include <bits/stdc++.h>
using namespace std;
int n,m;
int a[10005];
在一条长长的走廊中,你从起点 1 出发,需要抵达终点 n。走廊上有 m 个双向传送门,每个传送门连接两个整数坐标点 u 和 v。当你走到一个有传送门的位置时,可以立即传送到该门连接的另一个位置,传送不消耗时间。在走廊上正常行走的速度是每分钟移动 1 个单位距离。你需要规划路线,使得抵达终点的总时间最少。注意:起点和终点可能没有传送门,此时你只能通过步行到达最近的传送门或直接步行到终点。走廊坐标可以视为一维数轴,步行的耗时等于坐标差的绝对值。传送门可以多次使用,且所有传送门连接的点坐标均为整数。
目的地坐标 n 满足 1≤n≤109,传送门个数 m 满足 1≤m≤104,每个传送门的两个端点满足 1≤u,v≤n。
第一行包含两个整数 n 和 m,表示目的地坐标和传送门个数。
接下来 m 行,每行包含两个整数 u 和 v,表示一个双向传送门连接的两个位置。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.