題目背景
bb地區在**過後,所有村莊都造成了一定的損毀,而這場**卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。
題目描述
給出bb地區的村莊數nn,村莊編號從00到n-1n−1,和所有mm條公路的長度,公路是雙向的。並給出第ii個村莊重建完成的時間t_iti
,你可以認為是同時開始重建並在第t_iti
天重建完成,並且在當天即可通車。若t_iti
為00則說明**未對此地區造成損壞,一開始就可以通車。之後有qq個詢問(x, y, t)(x,y,t),對於每個詢問你要回答在第tt天,從村莊xx到村莊y的最短路徑長度為多少。如果無法找到從xx村莊到yy村莊的路徑,經過若干個已重建完成的村莊,或者村莊xx或村莊yy在第t天仍未重建完成 ,則需要返回-1−1。
輸入格式
第一行包含兩個正整數n,mn,m,表示了村莊的數目與公路的數量。
第二行包含nn個非負整數t_0, t_1,…, t_t0
,t1 ,…,t
n−1
,表示了每個村莊重建完成的時間,資料保證了t_0 ≤ t_1 ≤ … ≤ t_t0
≤t1 ≤…≤t
n−1
。接下來mm行,每行33個非負整數i, j, wi,j,w,ww為不超過1000010000的正整數,表示了有一條連線村莊ii與村莊jj的道路,長度為ww,保證i≠ji
=j,且對於任意一對村莊只會存在一條道路。
接下來一行也就是m+3m+3行包含乙個正整數qq,表示qq個詢問。
接下來qq行,每行33個非負整數x, y, tx,y,t,詢問在第tt天,從村莊xx到村莊yy的最短路徑長度為多少,資料保證了tt是不下降的。
輸出格式
共qq行,對每乙個詢問(x, y, t)(x,y,t)輸出對應的答案,即在第tt天,從村莊xx到村莊yy的最短路徑長度為多少。如果在第t天無法找到從xx村莊到yy村莊的路徑,經過若干個已重建完成的村莊,或者村莊x或村莊yy在第tt天仍未修復完成,則輸出-1−1。
輸入輸出樣例
輸入 #1複製
4 51 2 3 4
0 2 1
2 3 1
3 1 2
2 1 4
0 3 5
42 0 2
0 1 2
0 1 3
0 1 4
輸出 #1複製
-1-154
說明/提示
對於30%30%的資料,有n≤50n≤50;
對於30%30%的資料,有t_i= 0ti
=0,其中有20%20%的資料有t_i = 0ti
=0且n>50n>50;
對於50%50%的資料,有q≤100q≤100;
對於100%100%的資料,有n≤200n≤200,m≤n \times (n-1)/2m≤n×(n−1)/2,q≤50000q≤50000,所有輸入資料涉及整數均不超過100000100000。
思路:加深了對floyd演算法的理解。floyd的狀態轉移方程為f(i,j) = min(f(i,j), f(i,k) + f(k,j))。k代表除了起點終點取了前k個點。題目給定了天數是遞增的,那麼我們就逐步遞增的增加k就可以了。如果不是遞增的,我們還得排下序。
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn =
205;
const
int maxm =
1e5+7;
const
int inf =
0x3f3f3f3f
;int day[maxn]
;int d[maxn]
[maxn]
;int
main()
for(
int i =
1;i <= m;i++
)int now =0;
day[n]
= inf;
int q;
scanf
("%d"
,&q)
;while
(q--)}
}if(day[x]
> t || day[y]
> t || d[x]
[y]== inf)
else
printf
("%d\n"
,d[x]
[y]);}
return0;
}
洛谷 P1119 災後重建
題目背景 b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。題目描述 給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度...
洛谷 P1119 災後重建
題目背景 b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。題目描述 給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度...
洛谷 P1119 災後重建
題目背景 b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。題目描述 給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度...