題目描述:
給定乙個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...