學 複習記錄 最 次 k短路

2021-08-10 08:01:57 字數 1058 閱讀 3649

時間複雜度n^3,慎用。

實現過程就是列舉中間點k,三層for處理出任意兩點之間的最短路。

板子:codevs 1077 多源最短路

簡單的應用:codevs 1079 回家

詳解重點是鬆弛操作。

用佇列實現。

首先將起點入隊,然後一層一層擴充套件節點。每擴充套件到乙個節點都將到達這個節點經過的路徑與現有的路徑長度比較,若更小,則更新。如果要更新的點不在佇列中,入隊。

期望時間複雜度為o(ke),k為每個點的平均入隊次數,e是邊的數量。然而複雜度玄學,,如果資料卡的話容易gg,還是慎用。

spfa的時間複雜度只與邊有關。

spfa可以處理負環。如果乙個點入隊超過n次,那麼說明存在負環。

spfa有兩個優化:slf和lll。

slf是雙端佇列優化。原理:將點入隊時,如果這個點的最短路徑估計值小於隊首的最短路徑估計值,那麼把先更新這個點會更優,所以放到佇列前面,否則就放到隊尾。

lll優化不會。

應用:codevs 1557 熱浪

板子。

codevs 2273 揚帆遠洋大戰牧師妹醬

雙端佇列優化的例項

codevs 1316 文化之旅

稍麻煩一點的spfa。

覺得過載運算子比較繁瑣所以一直沒怎麼用……

實際上這要比spfa穩定。

時間複雜度:o((n+m)logn)

用小根堆實現

板子及詳解

將點集分為三部分,一部分已經更新過最短路,設為黑點;另一部分尚未更新最短路,設為白點;當前正在更新的為藍點。

初始時黑點只有起始點。將起始點放入堆中,擴充套件與之相鄰的點,即藍點。按照最短路徑遞增順序將藍點擴充套件出的白點的最短路更新後,把藍點標記為黑點。

如果最短路可以被更新,那麼直接更新最短路。次短路等於更新前的最短路。

如果最短路不可以被更新,次短路可以被更新,那麼就更新次短路。

如果次短路可以被次短路更新,就更新~

codevs 1269 匈牙利遊戲

次短路不能初始化為0具體見↑

不會。

CPP 複習 記錄

1.bool bool temp 0 cout temp temp 0 bool temp 1 cout temp output is 1 if temp 0,temp temp 1 2.static cast value static cast 98 is b 3.vc microsoft vc ...

2019 7 18 複習記錄

string date string format int timestamp w 星期中的第幾天,數字表示 date w time z 年份中的第幾天 date z strtotime 2017 02 18 t 給定月份所應有的天數 date t strtotime 2019 02 include...

電機學 複習大綱

2006 04 27 14 30 20 433電機學 複習大綱 課程編號 03z8329 課程名稱 電機學 electrical machine 一 課程教學目標 本課程是電氣工程及其自動化專業方向的主要專業基礎課,是繼數學 物理 電路等有關理論基礎課之後必修的課程。要求學生能綜合運用已學過的電 磁...