一、題目
眾所周知,tt 有乙隻魔法貓。
今天他在 b 站上開啟了一次旅行直播,記錄他與魔法貓在喵星旅遊時的奇遇。 tt 從家裡出發,準備乘坐貓貓快線前往喵星機場。貓貓快線分為經濟線和商業線兩種,它們的速度與價錢都不同。當然啦,商業線要比經濟線貴,tt 平常只能坐經濟線,但是今天 tt 的魔法貓變出了一張商業線車票,可以坐一站商業線。假設 tt 換乘的時間忽略不計,請你幫 tt 找到一條去喵星機場最快的線路,不然就要誤機了!
二、輸入
輸入包含多組資料。每組資料第一行為 3 個整數 n, s 和 e (2 ≤ n ≤ 500, 1 ≤ s, e ≤ 100),即貓貓快線中的車站總數,起點和終點(即喵星機場所在站)編號。
下一行包含乙個整數 m (1 ≤ m ≤ 1000),即經濟線的路段條數。
接下來有 m 行,每行 3 個整數 x, y, z (1 ≤ x, y ≤ n, 1 ≤ z ≤ 100),表示 tt 可以乘坐經濟線在車站 x 和車站 y 之間往返,其中單程需要 z 分鐘。
下一行為商業線的路段條數 k (1 ≤ k ≤ 1000)。
接下來 k 行是商業線路段的描述,格式同經濟線。
所有路段都是雙向的,但有可能必須使用商業車票才能到達機場。保證最優解唯一。
三、輸出
對於每組資料,輸出3行。第一行按訪問順序給出 tt 經過的各個車站(包括起點和終點),第二行是 tt 換乘商業線的車站編號(如果沒有使用商業線車票,輸出"ticket not used",不含引號),第三行是 tt 前往喵星機場花費的總時間。
本題不忽略多餘的空格和製表符,且每一組答案間要輸出乙個換行。
四、樣例輸入輸出
input
4 1 4output41 2 2
1 3 3
2 4 4
3 4 5
12 4 3
1 2 425五、解題思路
迪傑斯特拉演算法。
對乙個點和它的鄰接點進行分析,如果經過兩點之間的邊能夠縮短距離,更新dis陣列。需要遍歷完所有的點。
將每個車站看成兩個點,分為兩層,當選擇商業線後,會從乙個層跨越到另乙個層,並且不能返回,由此實現只選擇一條商業線。使用鏈式前向星儲存邊,使用最小堆結構實現取邊最小,每次拿出的是最小的邊,優化演算法的複雜度。在更新dis陣列時,更新path陣列記錄位置,實現路徑的記錄,最後使用遞迴輸出。
注意:分析可知,該題給出的邊為雙向邊,新增時要注意。最小堆結構使用優先佇列實現,注意priority_queue預設最大堆,存邊時取反,即可實現最小堆。
六、樣例**
#include
#include
#include
#include
using
namespace std;
#define inf 5*1e8
int n,s,e;
struct edge
ed[10000];
int head[
1010];
int tot;
void
add(
int x,
int y,
int w)
int vis[
1010];
int path[
1010];
int dis[
1010];
int bl;
priority_queueint,
int>
> q;
void
dijkstra
(int s)
dis[s]=0
; path[s]=0
; q.
push
(make_pair(0
,s))
;while
(q.size()
)}}}
void
find
(int m)
else cout<" ";
if(m>
505&&path[m]
<
505) bl=path[m];}
intmain()
scanf
("%d"
,&num)
;for
(int i=
0;i)dijkstra
(s);
if(pt==
1) cout
if(dis[e]
>dis[e+
505]
)else
}return0;
}
TT 的旅行日記(Dijkstra
眾所周知,tt 有乙隻魔法貓。今天他在 b 站上開啟了一次旅行直播,記錄他與魔法貓在喵星旅遊時的奇遇。tt 從家裡出發,準備乘坐貓貓快線前往喵星機場。貓貓快線分為經濟線和商業線兩種,它們的速度與價錢都不同。當然啦,商業線要比經濟線貴,tt 平常只能坐經濟線,但是今天 tt 的魔法貓變出了一張商業線車...
第七周作業作業
1 自建yum倉庫,分別為網路源和本地源 建立yum配置檔案,類似如下 base name base baseurl file misc cd gpgcheck 0 epel name epel baseurl gpgcheck 0 enabled 1 本地源 以前自己整理的 2 編譯安裝http2...
第七周作業
書中習題1 說說下列程式的執行過程和運算結果 include includeusing namespace std double squ double x 函式原形 int main 主函式 書2,不用庫函式,求整數次冪 3.程式設計實現輸入兩個4x5矩陣和5x3矩陣,定義函式並在主函式中呼叫計算它...