題意
/description:
小z最近出去旅遊,遇上倒霉事了。他和旅遊團一起去遊洞穴。這裡有n個洞穴,編號為1到n。它們之間,有的有雙向的小路相連,有的卻沒有,不過所有洞穴都通過小路連在了一起,沒有任何兩個洞穴不能相互到達。當遊客們分散在各處的時候,忽然出了些故障,所有燈全部熄滅。這時廣播響起,要求遊客們迅速疏散。
有兩個洞穴是出口,分別編號1和n,每個遊客都選擇最短的路線,從某乙個出口逃離。所有的小路都是有長度的,而所有遊客的速度都認為是1。
現在請問,在給定的t時間內,最多有多少人可以逃離。另乙個問題,最慢的遊客離開需要多少時間。 讀入
/input
:第一行,三個整數,n,m和t,分別表示洞穴的數目,小路的數量和給定的逃離時間。
接下來m行,每行三個整數x,y和l,表示這條小路連線了編號為x和y的洞穴,而它的長度為l。x和y互不相同,且都在1到n之間。任何兩個洞穴之間最多只有一條小路將它們直接相連。
下一行,乙個整數k,表示遊客的數量。
最後一行,k個整數,每個都在1到n之間,表示每個遊客所在的洞穴(可能乙個洞穴會有多個人)。
輸出/output:
輸出兩行,每行乙個整數。第一行輸出t時間內多少人可以逃離,第二行輸出最慢的遊客逃離洞穴所需要的時間。題解/
solution
:floyd做,最後統計。
**/code:
var
n,m,time,ans,max:longint;
a:array [0..501,0..501] of longint;
sum:array [0..501] of longint;
bo:array [0..501] of boolean;
procedure init;
var i,x,y,z,k:longint;
begin
fillchar(sum,sizeof(sum),0);
fillchar(a,sizeof(a),$7f div 3);
readln(n,m,time);
for i:=1 to m do
begin
readln(x,y,z);
a[x,y]:=z; a[y,x]:=z;
end;
fillchar(bo,sizeof(bo),false);
readln(k);
ans:=0; max:=0;
for i:=1 to k do
begin
read(x);
sum[x]:=sum[x]+1;
bo[x]:=true;
end;
end;
function min(o,p:longint):longint;
begin
if oi) and (k<>j) and (i<>j) then
a[i,j]:=min(a[i,j],a[i,k]+a[k,j]);
end;
procedure print;
var i,t:longint;
begin
ans:=sum[1]+sum[n]; max:=0;
for i:=2 to n-1 do
if bo[i] then
begin
if (a[i,1]<=time) or (a[i,n]<=time) then
ans:=ans+sum[i];
t:=min(a[i,1],a[i,n]);
if t>max then max:=t;
end;
writeln(ans);
write(max);
end;
begin
init;
main;
print;
end.
1754 逃離洞穴
基礎bfs題目的變形,在結構體裡設定答案,在狀態更新後才進行判斷。兩個基礎的bfs.include include include using namespace std intconst maxn 2000 int vis maxn maxn int rr,cc char map maxn max...
LCT 洞穴勘測
codevs洞穴勘測原題戳這裡 題目大意 建路 connect u v 毀路 destroy u v 查詢路是否聯通 query u v 用到的幾個基本操作,link,cut,access,reverse,find 本題中所用到的ch和fa,為splay樹上的,與原樹沒有關係 博主個人愛好結構體,不...
死亡洞穴 cave
題目背景 在 caima 的 rpg 遊戲中,控制著兩個人 vv 和 jj。這次 vv 和 jj 掉入了乙個死亡洞穴,洞穴是乙個 n m 的矩陣。之所以稱之 為死亡洞穴,是因為在這個矩陣中有一些死亡十字。如下圖中的 v j 由於 vv 和 jj 被分撒在了兩地,而 jj 還受了重傷,你需要讓 vv ...