貌似一直不寫題解不太好qaq 但是找不到題啊...
隨便寫點水題來補部落格吧
題目不pa了,點鏈結吧...
點我看題
很明顯這是道sb題...
思路: 對於每乙個殭屍城市預處理其 s 距離內的城市,然後用個cost陣列記錄點權,然後直接跑spfa就好了。
看下資料,可以發現如果k值較大有可能會tle(沒測不知道qaq)。所以加個簡單的優化就可以吧(可能吧qaq)。
簡單的優化就是在預處理的時候如果某乙個殭屍城市 s 距離內的城市有另外的殭屍城市,辣麼這個殭屍城市可以不入隊,這樣可以少掉一點重複的無效搜尋。
依舊看一下資料 發現答案會爆 int 所以就記得開 int64(long long)。
所以看資料是可以看出坑點的... (完美避開=v=
然後直接**吧。
typeview codenode=record
y:longint;
next:longint;
end;var
n,m,k,s:longint;
tot:longint;
cost1,cost2:longint;
x,y:longint;
i:longint;
cost,first,a:
array[0..100050]of
longint;
q:array[0..1000000]of
longint;
e:array[0..400200]of
node;
dist:
array[0..100050]of
int64;
v:array[0..100050]of
boolean;
procedure
adde(x,y:longint);
begin
e[tot].next:=first[x];
e[tot].y:=y;
first[x]:=tot;
inc(tot);
end;
procedure
bfs(x:longint);
varhead,tail:longint;
now,y,i:longint;
begin
head:=1
; tail:=1;
for i:=1
to n do
dist[i]:=-1
; dist[x]:=0
; q[
1]:=x;
while head<=tail do
begin
now:=q[head];
i:=first[now];
while i<>-1
dobegin
y:=e[i].y;
if (dist[y]<0)and(cost[y]>=0) then
begin
dist[y]:=dist[now]+1
; cost[y]:=cost2;
if dist[y]then
begin
inc(tail);
q[tail]:=y;
end;
end;
i:=e[i].next;
end;
inc(head);
end;end
;procedure
spfa(s:longint);
varhead,tail:longint;
now,y,i:longint;
begin
head:=1
; tail:=1;
for i:=1
to n do
begin
dist[i]:=1
<< 35
; v[i]:=false;
end; dist[s]:=0
; q[
1]:=s;
v[s]:=true;
while head<=tail do
begin
now:=q[head];
i:=first[now];
while i<>-1
dobegin
y:=e[i].y;
if (dist[y]>dist[now]+cost[y])and(cost[y]>=0) then
begin
dist[y]:=dist[now]+cost[y];
ifnot v[y] then
begin
inc(tail);
q[tail]:=y;
v[y]:=true;
end;
end;
i:=e[i].next;
end;
inc(head);
v[now]:=false;
end;end
;begin
read(n,m,k,s);
read(cost1,cost2);
for i:=1
to k do
begin
read(a[i]);
cost[a[i]]:=-1;
end;
for i:=1
to n do
first[i]:=-1;
for i:=1
to m do
begin
read(x,y);
adde(x,y);
adde(y,x);
end;
for i:=1
to k do
bfs(a[i]);
for i:=1
to n do
if cost[i]=0
then cost[i]:=cost1;
spfa(1);
writeln(dist[n]-cost[n]);
end.
洛谷 P3393 逃離殭屍島
題目描述 小a住的國家被殭屍侵略了!小a打算逃離到該國唯一的國際空港逃出這個國家。該國有n個城市,城市之間有道路相連。一共有m條雙向道路。保證沒有自環和重邊。k個城市已經被殭屍控制了,如果貿然闖入就會被感染tat 所以不能進入。由其中任意城市經過不超過s條道路就可以到達的別的城市,就是危險城市。換句...
洛谷 P3393 逃離殭屍島
小a住的國家被殭屍侵略了!小a打算逃離到該國唯一的國際空港逃出這個國家。該國有n個城市,城市之間有道路相連。一共有m條雙向道路。保證沒有自環和重邊。k個城市已經被殭屍控制了,如果貿然闖入就會被感染tat.所以不能進入。由其中任意城市經過不超過s條道路就可以到達的別的城市,就是危險城市。換句話說只要某...
洛谷P3393 逃離殭屍島
題目大意 有n個城市m條雙向道路,還有k個已經被殭屍占領的城市,規定 被占領城市不能經過,走不超過s條道路就能到達被占領城市的算危險城市,路費q,其他城市算安全城市,路費p。求從1走到n的最少花費 1和n路費為0 解題思路 我們先跑一遍bfs,求出哪些是危險城市,然後記錄每個城市的路費 貌似int會...