把“地铁线路上的连续乘坐”看作在同一条线路内行走不增加换乘次数,只有从一条线路换到另一条线路才计一次换乘。
建模为线路图:每条地铁线路是一条图上的点;若两条线路在某个站有交集,则两点之间连一条边。
查询从起点站 s 到终点站 t 的最少换乘次数:
s 的所有线路作为起点集合,包含 t 的所有线路作为目标集合。关键算法:建图 + BFS 最短路(无权图)。
某座城市的轨道交通里,共有 q 条轨线和 p 个停靠点。每个停靠点视为一个结点,编号从 0 起按次序排开。两条不同轨线若在同一停靠点交会,便可在该点从一条轨线改乘到另一条;也就是两条轨线名单里出现同一个编号,该点就是改乘处,对这两条轨线而言此处连通。现给出若干次行程询问(从起点停靠点到终点停靠点),请对每次询问求出最少要改乘多少次轨线。
第一行三个整数 p、q 和 u,依次为停靠点个数、轨线数量、以及要问的起讫点组合数。
随后 q 行,每行刻画一条轨线:先给出整数 c,表示这条轨线经过几个停靠点,再给出 c 个整数,即这些停靠点的编号(从 0 起)。
再随后 u 行,每行两个整数 b 和 e,表示一次询问的起点与终点。p,q,u 的取值范围是 [0,1000)。
对每次询问输出一个整数,即从起点到终点最少要改乘几次;若根本走不到,输出 −1。
输入
5 3 3
3 0 1 2
2 2 3
2 3 4
0 2
0 4
1 3
输出
0
2
1
说明
从停靠点 0 到停靠点 2 ,同在第一条轨线上,不用改乘
从停靠点 0 到停靠点 4 ,最少改乘 2 次
从停靠点 1 到停靠点 3 ,最少改乘 1 次
输入
6 3 3
2 0 1
3 1 2 3
2 4 5
0 3
0 5
4 5
输出
1
-1
0
说明
从停靠点 0 到停靠点 3 ,最少要改乘 1 次(例如先沿第一条走到 1,再改乘第二条经 2 到 3);从停靠点 4 到停靠点 5 ,不用改乘(都在第三条上)。0 到 5 两套轨线不相交,无法到达。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册