洛谷 P1119 災後重建 floyd

2021-09-28 17:22:53 字數 2909 閱讀 9089

題目背景

b

bb地區在**過後,所有村莊都造成了一定的損毀,而這場**卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。

題目描述

給出b

bb地區的村莊數n

nn,村莊編號從0

00到n−1

n−1n−

1,和所有m

mm條公路的長度,公路是雙向的。並給出第i

ii個村莊重建完成的時間tit_

ti​,你可以認為是同時開始重建並在第tit_

ti​天重建完成,並且在當天即可通車。若tit_

ti​為0

00則說明**未對此地區造成損壞,一開始就可以通車。之後有q

qq個詢問(x,

y,t)

(x,y,t)

(x,y,t

),對於每個詢問你要回答在第t

tt天,從村莊x

xx到村莊y

yy的最短路徑長度為多少。如果無法找到從x

xx村莊到y

yy村莊的路徑,經過若干個已重建完成的村莊,或者村莊x

xx或村莊y

yy在第t

tt天仍未重建完成 ,則需要返回−1−1

−1。輸入格式

第一行包含兩個正整數n,m

n,mn,

m,表示了村莊的數目與公路的數量。

第二行包含n

nn個非負整數t0,

t1,…

…,tn

−1

t_,t_,……,t_

t0​,t1

​,……

,tn−

1​,表示了每個村莊重建完成的時間,資料保證了t

0<=t

1<=…

…<=t

n−

1t_<=t_<=……<=t_

t0​<=t

1​<=…

…<=t

n−1​

。接下來m

mm行,每行3

33個非負整數i,j

,w

i,j,w

i,j,w,w

ww為不超過10000的正整數,表示了有一條連線村莊i

ii與村莊j

jj的道路,長度為w

ww,保證i≠j

i≠ji

​=j,且對於任意一對村莊只會存在一條道路。

接下來一行也就是m+3

m+3m+

3行包含乙個正整數q

qq,表示q

qq個詢問。

接下來q

qq行,每行3

33個非負整數x,y

,t

x,y,t

x,y,

t,詢問在第t

tt天,從村莊x

xx到村莊y

yy的最短路徑長度為多少,資料保證了t

tt是不下降的。

輸出格式

共q

qq行,對每乙個詢問(x,

y,t)

(x,y,t)

(x,y,t

)輸出對應的答案,即在第t

tt天,從村莊x

xx到村莊y

yy的最短路徑長度為多少。如果在第t

tt天無法找到從x

xx村莊到y

yy村莊的路徑,經過若干個已重建完成的村莊,或者村莊x

xx或村莊y

yy在第t

tt天仍未修復完成,則輸出−1−1

−1。思路:非常好的題目,涉及到flo

yd

floyd

floy

d演算法的本質。flo

yd

floyd

floy

d演算法的核心思想:通過其他的點進行中轉來求兩點之間的最短路。

void

floyd()

這段**的基本思想就是:最開始只允許經過1

11號頂點進行中轉,接下來只允許經過1

11和2

22號頂點進行中轉……允許經過[1,

n]

[1,n]

[1,n

]號所有頂點進行中轉,求任意兩點之間的最短路程。用一句話概括就是:從i

ii號頂點到j

jj號頂點只經過前k

kk號點的最短路程或者就是從i

ii直接到j

jj的路程。講到這裡再看一下題目,就不難將兩者聯絡起來了,直接跑一次flo

yd

floyd

floy

d,然後對於某個查詢,若其對應的時間下前i

ii個村莊都已經建立好了,那麼就看在第i

ii次更新後u

uu和v

vv的最短距離(當然u

uu和v

vv都要<=i

<=i

<=i

)。**:

#include

#define inf 0x3f3f3f3f

#define pr pair

using

namespace std;

typedef

long

long ll;

const

int maxn=

205;

int t[maxn]

;int dp[maxn]

[maxn]

[maxn]

;int n,m,q;

void

floyd()

intmain()

floyd()

;scanf

("%d"

,&q)

;int tmp;

while

(q--

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