題目大意:
**後,有n個受損的村莊,在任一乙個村莊重建完成之前,其他村莊都不能到達這個村莊。
給出n個村莊重建完成的時間和連通的情況。
有q個詢問,問在時間t,a和b這兩個村莊是否連通。
若連通,則輸出a和b的最短路徑,否則輸出-1。
題解:
因為保證詢問的時間t是不遞減,只需判斷中轉站k是否連通即可。
**:
1var2
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條公路的長度...