这道题我们在构图上进行改变,从而简化题目,跑一遍单源最短路就可以得到结果。
题目询问换乘次数,也就是乘几台不同编号的大巴数量减1
题目中给出大巴路线,那我们就可以知道一个点可以可以直接到达哪些点,我们直接构建一条边在两点之间即可。比如 大巴路线为4 7 3 6 那么我们在建图时创建 4–>7 4–>3 4—>6 7–>3 7–>6 3–>6这样我们跑一遍最短路可以得出乘坐了几台不同编号的公交车,最后结果减去1就是答案。
#include <bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f
using namespace std;
typedef pair<int,string> PII;
const int N=1e6+10;//注意边的范围,由于我们重新构图 500*500最坏
int n,m,k,ans,ecnt;
int head[N],vis[510];
int d[510],stop[510];
struct edge <