西伯利亞北部的寒地,坐落著由 n 個小島組成的島嶼群,我們把這些小島依次編號為 1 到 n 。
起初,島嶼之間沒有任何的航線。後來隨著交通的發展,逐漸出現了一些連通兩座小島的航線。例如增加一條在 u 號小島與 v 號小島之間的航線,這條航線的用時為 e。 那麼沿著這條航線,u 號小島上的人可以前往 v 號小島,同樣的 v 號小島上的人也可以前往 u 號小島,其中沿著這一條航線花費的時間為 e。
同時,隨著旅遊業的發展,越來越多的人前來遊玩。那麼兩個小島之間的最短路徑是多少便成為了飽受關注的話題。
輸入格式:
輸入共 m+1 行。
第一行有兩個整數 n 和 m,分別表示小島的數與總算子。
接下來的 m 行,每行表示乙個操作,格式如下:
0 s t:表示詢問從 s 號小島到 t 號小島的最短用時(1<=s<=n, 1<=t<=n, s\neq t)。
1 u v e:表示新增了一條從 u 號小島到 v 號小島,用時為 e 的雙向航線(1<=u<=n, 1<=v<=n, u ≠ v, 1<=e<=10^6)。
輸出格式:
輸出針對每一次詢問,單獨輸出一行。
對於每一組詢問來說,如果不存在可行的道路,則輸出 -1,否則輸出最短用時。
輸入樣例#1:
複製
3 81 3 1 10
0 2 3
1 2 3 20
1 1 2 5
0 3 2
1 1 3 7
1 2 1 9
0 2 3
輸出樣例#1:
複製
-11512
輸入樣例#2:
複製
5 161 1 2 343750
1 1 3 3343
1 1 4 347392
1 1 5 5497
1 2 3 123394
1 2 4 545492
1 2 5 458
1 3 4 343983
1 3 5 843468
1 4 5 15934
0 2 1
0 4 1
0 3 2
0 4 2
0 4 3
0 5 3
輸出樣例#2:
複製
595521431
9298
16392
24774
8840
對於20%的資料,n<=5且m<=30。
對於40%的資料,n<=20且m<=200。
對於60%的資料,n<=80且m<=500。
對於80%的資料,n<=100且m<=2500。
對於100%的資料,n<=100且m<=5000。
最短路。。。
頭一次發現 spfa 玄學複雜度:o(rp)。。。
附**:
#include#include#include#include#define maxn 110
#define maxm 5010
#define max 999999999
using namespace std;
int n,m,c=1;
int head[maxn],path[maxn];
bool vis[maxn];
struct nodea[maxm<<1];
inline int read()
while(c>='0'&&c<='9')
return date*w;
}inline int relax(int u,int v,int w)
return 0;
}inline void add(int u,int v,int w)
void spfa(int s,int t)
path[s]=0;
vis[s]=true;
q.push(s);
while(!q.empty())}}
printf("%d\n",path[t]==max?-1:path[t]);
}int main()
}return 0;
}
洛谷 P2683 小島
西伯利亞北部的寒地,坐落著由 n 個小島組成的島嶼群,我們把這些小島依次編號為 1 到 n 起初,島嶼之間沒有任何的航線。後來隨著交通的發展,逐漸出現了一些連通兩座小島的航線。例如增加一條在 u 號小島與 v 號小島之間的航線,這條航線的用時為 e。那麼沿著這條航線,u 號小島上的人可以前往 v 號...
洛谷P5049 洛谷P5022 題解 旅行
原題 資料加強版 加強版 參考你谷題解 終於調過了 又是一如既往的申必錯誤 noi plus石錘了 原題的資料允許我們 o n 2 暴力斷邊,但是加強版的資料達到了 n log n 級別,我們必須在斷邊這一環節尋求更好的解法。考慮我們進入環後在何處回溯 根據繼續走環走到的點分類 設當前已經從 b 走...
洛谷練習P2279 P1346
2020年,人類在火星上建立了乙個龐大的基地群,總共有n個基地。起初為了節約材料,人類只修建了n 1條道路來連線這些基地,並且每兩個基地都能夠通過道路到達,所以所有的基地形成了乙個巨大的樹狀結構。如果基地a到基地b至少要經過d條道路的話,我們稱基地a到基地b的距離為d。由於火星上非常乾燥,經常引發火...