概念:
分層圖最短路是指在可以進行分層圖的圖上解決最短路問題。
一般模型是:
在圖上,有k次機會可以直接通過一條邊,問起點與終點之間的最短路徑。
模板
首先看一個問題:
在你的強力援助下,PCY 成功完成了之前的所有任務,他覺得,現在正是出去浪的大好時光。於是,他來到高速公路上,找到一輛摩的前往幾千公里以外他心儀的那家黃燜雞米飯。由於 PCY 的品味異於常人,途經幾百個城市的黃燜雞米飯他都不屑一顧,他只願意前往他心中最好的那家,但是為了一碗二十塊錢的黃燜雞米飯,他不願意花上幾千塊的路費,他希望路費儘量少。高速路上的警察叔叔被他的行為所打動,於是在多方協調下,最多 K 條城市之間的高速收費站願意免費為 PCY 放行(可以任意選擇)。
顯然,PCY 已經筋疲力盡,不想再動用自己的數學天才來計算他可以花費的最小路費,因此他希望你可以幫他最後一次,他說他可以請你吃大碗的黃燜雞米飯,還可以加一瓶豆奶。
現在給你 N 個城市 (編號為0 …N - 1 ),M 條道路,和每條高速公路的花費Wi ,以及題目所描述的 K。PCY 想從城市 S 到城市 T ,因為他對 T 城市的黃燜雞米飯情有獨鍾。
Input
第一行,三個整數 N ,M ,K ,如題意所描述
第二行,兩個整數 S ,T ,代表出發城市和目標城市編號
接下來 M 行,每行三個整數 X ,Y ,W ,代表 X 和 Y 城市之間的高速公路收費為 W 元
Output
共一行 ,輸出一個整數 ,代表PCY 最少需要花費的路費。
常規算法分析
我們擁有k次機會可以免費通過,所以我們可以設dis【i】【j】表示在還剩j次免花費機會的情況下到i的最小花費,然後在圖上進行一次SPFA,對dis【T】【i】取min即可
代碼:
正規解法:
我們可以將這張圖分為k層,在每一層之間建立邊權為0的邊,這樣就能夠達到目的
代碼: