洛谷 p1346 題目
在乙個神奇的小鎮上有著乙個特別的電車網路,它由一些路口和軌道組成,每個路口都連線著若干個軌道,每個軌道都通向乙個路口(不排除有的觀光軌道轉一圈後返回路口的可能)。在每個路口,都有乙個開關決定著出去的軌道,每個開關都有乙個預設的狀態,每輛電車行駛到路口之後,只能從開關所指向的軌道出去,如果電車司機想走另乙個軌道,他就必須下車切換開關的狀態。
為了行駛向目標地點,電車司機不得不經常下車來切換開關,於是,他們想請你寫乙個程式,計算一輛從路口a
aa到路口b
bb最少需要下車切換幾次開關。
輸入第一行有3個整數2<=n
nn<=100,1<=a
aa,b
bb<=n
nn,分別表示路口的數量,和電車的起點,終點。
接下來有n
nn行,每行的開頭有乙個數字kiki
ki(0<=kiki
ki<=n
nn-1),表示這個路口與ki條軌道相連,接下來有ki個數字表示每條軌道所通向的路口,開關預設指向第乙個數字表示的軌道。
輸出輸出檔案只有乙個數字,表示從a
aa到b
bb所需的最少的切換開關次數,若無法從a
aa前往b
bb,輸出-1。
樣例input
3 2 1
2 2 3
2 3 1
2 1 2
output
0解題思路
每乙個路口和它相連的第乙個軌道開關次數為0
與之相連的別的軌道開關次數為1
spfa
代價是開關次數
**
#include
#include
#include
using namespace std;
int n,x,y,t,h,m,s;
long int p[12000],f[12000],dis[12000],head[12000]
;struct ca[12000]
;int main()}
p[x]
=1; f[1]
=x; dis[x]
=0; h=0;
t=1;
do}p[f[h]
]=0;
}while(h(dis[y]
==dis[0]
) //不能到達輸出-1,否輸出最小開關次數
cout<<-1;
else cout<
}
洛谷 P1346 電車
稍微包裝過一下的最短路。如果初始狀態就是到達那個路口,就把權值搞為0,如果不是就搞為1 然後跑最短路,我用的是spfa,不過100的資料怎麼跑都行吧。include includeusing namespace std const int maxn 100 int n,a,b,k,map maxn ...
洛谷 P1346 電車
題目描述 在乙個神奇的小鎮上有著乙個特別的電車網路,它由一些路口和軌道組成,每個路口都連線著若干個軌道,每個軌道都通向乙個路口 不排除有的觀光軌道轉一圈後返回路口的可能 在每個路口,都有乙個開關決定著出去的軌道,每個開關都有乙個預設的狀態,每輛電車行駛到路口之後,只能從開關所指向的軌道出去,如果電車...
洛谷P1346 電車
在乙個神奇的小鎮上有著乙個特別的電車網路,它由一些路口和軌道組成,每個路口都連線著若干個軌道,每個軌道都通向乙個路口 不排除有的觀光軌道轉一圈後返回路口的可能 在每個路口,都有乙個開關決定著出去的軌道,每個開關都有乙個預設的狀態,每輛電車行駛到路口之後,只能從開關所指向的軌道出去,如果電車司機想走另...