2016東莞市特長生考試 村莊重建
time limit:10000ms memory limit:256000k
total submit:3 accepted:1
case time limit:1000ms
description
b 地區在**過後,所有村莊都造成了一定的損毀,而這場**卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。
給出 b 地區的村莊數 n,村莊編號從 0 到 n-1,和所有 m 條公路的長度,公路是雙向的。並給出第 i 個村莊重建完成的時間 t[i],你可以認為是同時開始重建並在第 t[i]天重建完成,並且在當天即可通車。若 t[i]為 0 則說明**未對此地區造成損壞,一開始就可以通車。之後有 q 個詢問(x, y, t),對於每個詢問你要回答在第 t 天,從村莊 x 到村莊 y 的最短路徑長度為多少。如果無法找到從 x 村莊到 y 村莊的路徑,經過若干個已重建完成的村莊,或者村莊 x 或村莊 y 在第 t 天仍未重建完成 ,則需要返回-1。
input
輸入檔案 rebuild.in 的第一行包含兩個正整數 n,m,表示了村莊的數目與公路的條數。
第二行包含 n 個非負整數 t[0], t[1], „, t[n – 1],表示了每個村莊重建完成的時間,資料保證了 t[0] ≤ t[1] ≤ „ ≤ t[n – 1]。
接下來 m 行,每行 3 個非負整數 i, j, w,w 為不超過 10000 的正整數,表示了有一條連線村莊 i 與村莊 j 的道路,長度為 w,保證 i≠j,且對於任意一對村莊只會存在一條道路。
接下來一行也就是 m+3 行包含乙個正整數 q,表示 q 個詢問。
接下來 q 行,每行 3 個非負整數 x, y, t,詢問在第 t 天,從村莊 x 到村莊 y 的
最短路徑長度為多少,資料保證了 t 是不下降的。
output
輸出檔案 rebuild.out 包含 q 行,對每乙個詢問(x, y, t)輸出對應的答案,即在第 t 天,從村莊 x 到村莊 y 的最短路徑長度為多少。如果在第 t 天無法找到從 x 村莊到 y 村莊的路徑,經過若干個已重建完成的村莊,或者村莊 x 或村莊 y
在第 t 天仍未修復完成,則輸出-1。
sample input
4 5 1 2 3
4 0 2 1 2
3 1 3 1 2
2 1 4 0 3
5 4 2 0 2
0 1 2
0 1 3
0 1 4
sample output
-1 -1 5 4
hint
【資料說明】
對於 30%的資料,有 n≤50;
對於 30%的資料,有 t[i] = 0,其中有 20%的資料有 t[i] = 0 且 n>50;
對於 50%的資料,有 q≤100;
對於 100%的資料,有 n≤200,m≤n*(n-1)/2,q≤50000,所有輸入資料涉及整數均不超過 100000
ps:那個樣例輸入有點問題,根據題意自己看著換行
做法:用floyd更新,當前詢問到哪天(因為最後的詢問第幾天是保證不下降的),就用這天之前(包括這天)的解封的點更新最短路,最後如果詢問的座標有哪個點無法達到就輸出-1
**如下:
const
maxn=200;
var ti:array[0..maxn] of longint;
f:array[0..maxn,0..maxn] of longint;
i,j,n,m,x,y,q,l,t,d,k:longint;
begin
read(n,m);
for i:=0
to n-1
dofor j:=0
to n-1
doif (i<>j) then f[i,j]:=maxlongint div
3; for i:=0
to n-1
doread(ti[i]);
for i:=0
to m-1
dobegin
read(x,y,d);
f[x,y]:=d;
f[y,x]:=d;
end;
read(q);
k:=0;
t:=0;
for l:=0
to q-1
dobegin
read(x,y,d);
while (kand(ti[k]<=d) do inc(k);
while tdo
begin
for i:=0
to n-1
dofor j:=0
to n-1
doif f[i,t]+f[t,j]then f[i,j]:=f[i,t]+f[t,j];
inc(t);
end;
if (x>=k)or(y>=k)or(f[x,y]=maxlongint div
3) then writeln(-1)
else writeln(f[x,y]);
end;
end.
2016東莞市特長生考試 遊戲問題
2016東莞市特長生考試 遊戲問題 description 五四 青年節到了,某學校要舉行乙個遊園活動,其中有乙個這樣的遊戲 n 個同學 編號從 0 到 n 1 圍坐一圈,按照順時針方向給 n 個位置編號,從0 到 n 1。最初,第 0 號同學在第 0 號位置,第 1 號同學在第 1 號位置,依此類...
2016東莞市特長生考試 子數整數
對於乙個五位數,可將其拆分為三個數字 sub1 a1a2a3,sub2 a2a3a4,sub3 a3a4a5 現在給定乙個正整數 k,要求你程式設計求出 10000 包括 10000 到 30000 包括 30000 之間所有滿足下述條件的五位數,條件是這些五位數的三個子數 sub1,sub2,su...
2016東莞市特長生考試 字串距離 dp
2016東莞市特長生考試 字串距離 description 設有字串 x,我們稱在 x 的頭尾及中間插入任意多個空格後構成的新字元 串為 x 的擴充套件串,如字串 x 為 abcbcd 則字串 abcb cd a bcbcd 和 abcb cd 都是 x 的擴充套件串,這裡 代表空格字元。如果 a1...