T1 换乘(metro)
题目背景
H3Z信息科学协会成员准备参加NOIP。他们准备从学校出发,乘坐地铁到达考场。但是,地铁线网错综复杂,换乘次数带来的问题困扰住了LzyCoding。作为信息科学协会的一名成员,你能写个程序来帮帮他吗?
问题描述
给定一个包含 \(n\) 个节点的地铁网络图(节点编号从 1 到 \(n\)),初始时没有任何连接。现在有 \(m\) 条地铁线路信息,每条线路连接两个节点并具有特定的权重 \(w\)。
换乘定义:如果乘客先乘坐了一条权重为 \(w_1\) 的线路,接着乘坐了一条权重为 \(w_2\) 的线路,且 \(w_1 \neq w_2\),则称为发生了一次"换乘"。
给定学校的位置 \(s\) 和考场的位置 \(t\),请找出一条从 \(s\) 到 \(t\) 的路径,使得整个行程中的换乘次数最少。
输入格式
第一行包含两个整数 \(n\) 和 \(m\),分别表示节点数量和线路数量。
接下来的 \(m\) 行,每行包含三个整数 \(u, v, w\),表示节点 \(u\) 和 \(v\) 之间有一条权重为 \(w\) 的线路。线路是双向的。
最后一行包含两个整数 \(s\) 和 \(t\),表示起点和终点。
注意:图中可能存在重边(两个节点间有多条相同或不同权重的线路)和自环(节点连接到自身的线路)。
输出格式
输出一个整数,表示从 \(s\) 到 \(t\) 的最少换乘次数。
如果不存在从 \(s\) 到 \(t\) 的路径,输出字符串 "Again For OI"
(不包含引号)。
特殊说明:
- 如果起点和终点相同,换乘次数为 \(0\) ;
- 如果路径只包含一条边,不会发生换乘,换乘次数为 \(0\) 。
样例
输入样例 1
text
2 1
1 2 1
1 2
输出样例 1
text
0
输入样例 2
text
4 4
1 2 1
2 3 2
3 4 1
2 4 3
1 4
输出样例 2
text
1
样例 2 解释:路径 1→2→4 的换乘情况:1(权重1)→2(权重3),权重从1变为3,发生1次换乘。
数据范围与约束
对于 \(100\%\) 的数据:
- \(1 \leq n \leq 10^5\)
- \(1 \leq m \leq 2 \times 10^5\)
- \(1 \leq u, v \leq n\)
- \(1 \leq w \leq 10^6\)
- \(1 \leq s, t \leq n\)
特别地,对于 $ 5% $ 的数据,保证不存在从 \(s\) 到 \(t\) 的路径。