洛谷 P1119 災後重建

2021-09-03 00:07:10 字數 1802 閱讀 5106

題目大意:

**後,有n個受損的村莊,在任一乙個村莊重建完成之前,其他村莊都不能到達這個村莊。

給出n個村莊重建完成的時間和連通的情況。

有q個詢問,問在時間t,a和b這兩個村莊是否連通。

若連通,則輸出a和b的最短路徑,否則輸出-1。

題解:

因為保證詢問的時間t是不遞減,只需判斷中轉站k是否連通即可。

**:

1

var2

n,m,q:longint;

3 t:array [0..2001] of

longint;

4 a:array [0..201,0..201] of

longint;

5procedure

init;

6var

7i,x,y,z:longint;

8begin

9 fillchar(a,sizeof(a),63

);10 fillchar(t,sizeof(t),63

);11

readln(n,m);

12for i:=1

to n do

13begin

14read(t[i]);

15 a[i,i]:=0;16

end;

17for i:=1

to m do

18begin

19readln(x,y,z);

20 x:=x+1; y:=y+1

;21 a[x,y]:=z; a[y,x]:=z;

22end;23

end;

2425

function

min(o,p:longint):longint;

26begin

27if othen

exit(o);

28exit(p);

29end;30

31procedure

main;

32var

33k,i,j,ii,x,y,tt:longint;

34begin

35readln(q);

36 k:=1;37

for ii:=1

to q do

38begin

39readln(x,y,tt);

40 x:=x+1; y:=y+1;41

while t[k]<=tt do

42begin

43for i:=1

to n do

44for j:=1

to n do

45 a[i,j]:=min(a[i,j],a[i,k]+a[k,j]);

46inc(k);

47end;48

if (t[x]<=tt) and (t[y]<=tt) and (a[x,y]<>a[0,0]) then

49 writeln(a[x,y]) else

50 writeln('-1'

);51

end;

52end;53

54begin

55init;

56main;

57end.

洛谷 P1119 災後重建

題目背景 b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。題目描述 給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度...

洛谷 P1119 災後重建

題目背景 b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。題目描述 給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度...

洛谷 P1119 災後重建

題目背景 b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。題目描述 給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度...