floyd,分治 D 路徑之和

2022-06-12 22:00:13 字數 634 閱讀 3694

對於每個\(y\),求除了\(y\)之外,其餘的所有點組成的有序點對\((x,z)\)

不經過\(y\)的最短路長度之和(不存在即為-1)。\(n\leq 320\)

太妙了,首先用floyd樸素就是\(o(n^4)\)

由於樸素演算法有很多冗餘狀態,

考慮分治處理,\([l,r]\)表示當前區間以外進行過floyd

對於\(l=r\)的時候直接統計答案,否則拆成\([l,mid],[mid+1,r]\)

然後計算左區間對右區間和右區間對左區間的貢獻,時間複雜度\(o(n^3\log n)\)

#include #include #include #define rr register

using namespace std;

const int n=321,inf=0x3f3f3f3f;

int dis[10][n][n],n; long long ans;

inline signed iut()

inline void min(int &a,int b)

signed main()

divi(0,1,n);

return !printf("%lld",ans);

}

最短路徑 Floyd

簡介 floyd演算法又稱為插點法,是一種利用動態規劃的思想尋找給定的加權圖中多源點之間最短路徑的演算法,與dijkstra演算法類似。該演算法名稱以創始人之一 1978年圖靈獎獲得者 史丹福大學電腦科學系教授羅伯特 弗洛伊德命名。樣例求解 示例 include include using name...

leetcode Path sum路徑之和

要求給定樹,與路徑和,判斷是否存在從跟到葉子之和為給定值的路徑。比如下圖中,給定路徑之和為22,存在路徑 5,4,11,2 因此返回true 否則返回false.5 4 8 11 13 4 7 2 5 思路 遞迴,從跟到葉子判斷,如果在葉子處剩下的給定值恰好為給定值,那麼返回ture.參考 defi...

floyd演算法(最短路徑)

最短路徑 描述 已知乙個城市的交通路線,經常要求從某一點出發到各地方的最短路徑。例如有如下交通圖 則從a出發到各點的最短路徑分別為 b 0c 10 d 50 e 30 f 60 輸入 輸入只有乙個用例,第一行包括若干個字元,分別表示各頂點的名稱,接下來是乙個非負的整數方陣,方陣維數等於頂點數,其中0...