AcWing 854 Floyd求最短路

2021-09-27 07:24:43 字數 1032 閱讀 2438

題目描述:

給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。

再給定k個詢問,每個詢問包含兩個整數x和y,表示查詢從點x到點y的最短距離,如果路徑不存在,則輸出「impossible」。

資料保證圖中不存在負權迴路。

輸入格式

第一行包含三個整數n,m,k

接下來m行,每行包含三個整數x,y,z,表示點x和點y之間存在一條有向邊,邊長為z。

接下來k行,每行包含兩個整數x,y,表示詢問點x到點y的最短距離。

輸出格式

共k行,每行輸出乙個整數,表示詢問的結果,若詢問兩點間不存在路徑,則輸出「impossible」。

資料範圍

1≤n≤200,

1≤k≤n^2

1≤m≤20000,

圖中涉及邊長絕對值均不超過10000。

輸入樣例:

3 3 2

1 2 1

2 3 2

1 3 1

2 11 3

輸出樣例:

impossible

1

分析:

多源最短路問題,採用floyd演算法,時間複雜度為o(n^3)。

floyd演算法的思想是動態規劃。設d[i][j]表示i點到j點的最短距離,i點到j點中間經過某點k,則狀態轉移方程為d[i][j] = min(d[i][k] + d[k][j],d[i][j])(1<=k<=n);然後用三重迴圈實現該狀態擴散的過程即可。注意對中間節點k的列舉需要放在迴圈的最外層,否則會出錯。

#include #include #include using namespace std;

const int maxn = 205;

int d[maxn][maxn],n,m,k;

void floyd()

int main()

floyd();

while(k--)

return 0;

}

AcWing 854 Floyd求最短路

目錄演算法求解 參考文章 題目傳送門 給定乙個 nn 個點 mm 條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。再給定 kk 個詢問,每個詢問包含兩個整數 xx 和 yy,表示查詢從點 xx 到點 yy 的最短距離,如果路徑不存在,則輸出impossible。資料保證圖中不存在負權迴路。輸入...

854 Floyd求最短路(不能有負權迴路)

給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。再給定k個詢問,每個詢問包含兩個整數x和y,表示查詢從點x到點y的最短距離,如果路徑不存在,則輸出 impossible 資料保證圖中不存在負權迴路。輸入格式 第一行包含三個整數n,m,k 接下來m行,每行包含三個整數x,y,z,...

AcWIng344 觀光之旅(floyd求最小環)

求最小環的原理是dp的思想,我們以環中最大的節點作為斷點,這樣在求floyd的過程中,在更新之前,可以用i和k以及j和k相連的兩條線路以及原先i和j在前k 1已經求出的最短路當作環進行比較 因為我們分割出了所有情況。而在求取方案的時候,我們設定乙個pos陣列,表示最短路的分割點,進行遞迴求取 inc...