P1346電車 最短路水題

2021-09-27 01:42:02 字數 1439 閱讀 9866

在乙個神奇的小鎮上有著乙個特別的電車網路,它由一些路口和軌道組成,每個路口都連線著若干個軌道,每個軌道都通向乙個路口(不排除有的觀光軌道轉一圈後返回路口的可能)。在每個路口,都有乙個開關決定著出去的軌道,每個開關都有乙個預設的狀態,每輛電車行駛到路口之後,只能從開關所指向的軌道出去,如果電車司機想走另乙個軌道,他就必須下車切換開關的狀態。

為了行駛向目標地點,電車司機不得不經常下車來切換開關,於是,他們想請你寫乙個程式,計算一輛從路口a到路口b最少需要下車切換幾次開關。

第一行有3個整數2<=n<=100,1<=a,b<=n,分別表示路口的數量,和電車的起點,終點。

接下來有n行,每行的開頭有乙個數字ki(0<=ki<=n-1),表示這個路口與ki條軌道相連,接下來有ki個數字表示每條軌道所通向的路口,開關預設指向第乙個數字表示的軌道。

輸出檔案只有乙個數字,表示從a到b所需的最少的切換開關次數,若無法從a前往b,輸出-1。

如果是第一條路邊權設為 1 否則為 0,跑一遍 dijstra 即可.

要注意輸入的格式= =

除此之外真的是大水題惹

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using

namespace std;

const

int maxn =

1e5+7;

const

int inf =

1e9;

struct edge

edge()

};struct node

node()

};bool

operator

<

(node n1, node n2)

int n;

int a, b;

vector g[

105]

;priority_queue q;

int ans[

105]

;bool vis[

105]

;int

main()

}for

(int i =

1; i <= n; i++

) ans[i]

= inf;

ans[a]=0

; q.

push

(node

(a,0))

;while

(!q.

empty()

)}if(ans[b]

< inf)

cout << ans[b]

<< endl;

else cout <<-1

<< endl;

}

洛谷P1346 電車(最短路)

在乙個神奇的小鎮上有著乙個特別的電車網路,它由一些路口和軌道組成,每個路口都連線著若干個軌道,每個軌道都通向乙個路口 不排除有的觀光軌道轉一圈後返回路口的可能 在每個路口,都有乙個開關決定著出去的軌道,每個開關都有乙個預設的狀態,每輛電車行駛到路口之後,只能從開關所指向的軌道出去,如果電車司機想走另...

洛谷P1346 電車 最短路 Floyed

在乙個神奇的小鎮上有著乙個特別的電車網路,它由一些路口和軌道組成,每個路口都連線著若干個軌道,每個軌道都通向乙個路口 不排除有的觀光軌道轉一圈後返回路口的可能 在每個路口,都有乙個開關決定著出去的軌道,每個開關都有乙個預設的狀態,每輛電車行駛到路口之後,只能從開關所指向的軌道出去,如果電車司機想走另...

洛谷P1346 電車(最短路徑問題)

原題位址 一 題目內容 二 解題思路 三 注意事項 在乙個神奇的小鎮上有著乙個特別的電車網路,它由一些路口和軌道組成,每個路口都連線著若干個軌道,每個軌道都通向乙個路口 不排除有的觀光軌道轉一圈後返回路口的可能 在每個路口,都有乙個開關決定著出去的軌道,每個開關都有乙個預設的狀態,每輛電車行駛到路口...