找出⼀条路线,使得对任何给定的起点和终点,可以找出中途经停站最少的路线;如果经停站⼀样多,则取需要换乘线路次数最少的路线
PAT中的图论最恶心难的题,根据题目描述可以看出是道最短路的题,但是本题还要求输出每条最短路的来源和线路,处理起来较为麻烦。
考虑把每条线路中的所有站点都连一条带权值的双向边,这样一来可以方便求出两点之间的最短路。
但是这样建图的缺点是边数巨多,朴素版的dijkstra会超时。这时我们需要堆优化版本的dijkstra
在求最短路的过程中如果进行更新,将最短路的来源和线路存储起来。
其他需要注意的点:线路中可能存在环路,输出时站点号码需要补0
#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
#define PII pair<int,int>
#define x first
#define y second
#define INF 0x3f3f3f3f
using namespace std;
const int N=1e4+10;