洛谷P1119 災後重建(floyd k值應用)

2021-09-29 14:48:36 字數 2408 閱讀 9969

題目背景

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條公路的長度...