1. 程式人生 > >[最短路] 最優乘車(bus)

[最短路] 最優乘車(bus)

Description 題目描述

某人從起點去目的地開會,期間需要轉乘公共汽車,他比較討厭專車,因此,要求你設計它如何乘車,使得在轉車次數最少的情況下,花費最小。已知起點在公交車站1,終點在公交車站N

Input 輸入

第一行為兩個數n,m,分別表示該城市中的公共汽車站點個數和線路的條數。
接下來的一個nn矩陣D,分別描述了這個城市n個站點的交通網路。數字0表示沒有連通,非0數字表示兩個站點之間的直達距離。每條道路都是雙向的,也就是資料保證Dij=Dji
接下來的m行,每行由若干不超過n的整陣列成,描述了一條公共汽車的行車線路。每條公交車線路都是往返行駛。

Output 輸出

兩個數,用一個空格隔開
第一個為最少轉車次數
第二個為最少乘車代價(乘車距離最短)。

Sample Input 樣例輸入

3 2
0 1 3
1 0 1
3 1 0
1 2 3
3 1

Sample Output 樣例輸出

1 2

Limits 限制

N1000M100
Time Limit:3s & Memory Limit:128MB

首先題意有些詭異,只乘一次車轉車次數為1?就當他第一次上車也是轉車吧……
看上去是一道最短路的題,可是要求維護兩個東西:轉車次數和最小距離,由題可知,優先維護轉車次數,其次維護最小距離。
還有一個小注意:先把一條線路上一個站到另一個站的最短距離處理一下,在跑全部的最短路時就不會出錯
再鬼畜一下讀入資料就好了……
上程式碼

Code

分層圖#1