外星人入侵地球。可怕的吃人外星人正在全國各地依次序建立它們的基地。
全國共有n(1≤ n ≤10,000)座城市,城市編號1~n。城市之間有m(0≤ m ≤100,000)條雙向道路相連。外星人計畫建立a(0≤a≤n)個基地。
你只有在距離當前所有外星人基地至少k(1≤k≤100)單位長度的城市才能得到安全。
所以你必須趕快寫乙個程式決定走到**去。
第1行:4個整數n, m, a, k
接下來m行,每行3個整數t1, t2(1≤t1
共a行,第i行1個整數,表示當外星人建好第i個基地後,距離當前所有基地b1,b2,…,bi至少k長度的城市的數量。
我們要想到,隨著新的基地的加入,最短距離不小於k的頂點數量是單調不增的,而且乙個頂點一旦進入最短距離小於k的集合,是不可能再跳出那個集合的。
這樣,我們可以維護乙個全域性變數ans,它的初值是第1次最短路後符合條件的頂點數。
在隨後的最短路演算法中,只要乙個f[i]小於k,就從ans中減1。
這樣就可以在每次最短路演算法後,直接輸出ans得解。
如果ans=0,那不用跑spfa,直接輸出0就好了。
const
maxn=20000;
maxe=210000;
type
arr=record
x,y,w:longint;
next:longint;
end;
var edge:array[1..maxe] of arr;
f:array[1..maxn] of longint;
ls:array[1..maxn] of longint;
ans:array[1..maxn] of boolean;
status:array[1..maxn] of boolean;
queue:array[1..maxe*10] of longint;
n,m,nm:longint;
a,dis:longint;
max:longint;
procedure
add(x,y,w:longint);
begin
nm:=nm+1;
edge[nm].x:=x;
edge[nm].y:=y;
edge[nm].w:=w;
edge[nm].next:=ls[x];
ls[x]:=nm;
end;
procedure
init;
var i,j,k:longint;
x,y,w:longint;
begin
readln(n,m,a,dis);
for i:=1
to m do
begin
readln(x,y,w);
add(x,y,w);
add(y,x,w);
end;
end;
procedure
spfa
(s:longint);
var i,j,k:longint;
head,tail:longint;
begin
fillchar(f,sizeof(f),$7f);
fillchar(status,sizeof(status),false);
head:=0; tail:=1;
queue[1]:=s;
status[s]:=true;
f[s]:=0;
repeat
head:=head+1;
i:=ls[queue[head]];
while i<>0
dowith edge[i] do
begin
if f[x]+wthen
begin
f[y]:=f[x]+w;
ifnot status[y]
then
begin
tail:=tail+1;
queue[tail]:=y;
status[y]:=true;
end;
end;
i:=next;
end;
status[queue[head]]:=false;
until head=tail;
end;
procedure
main;
var i,j,k:longint;
begin
max:=n;
for i:=1
to a do
begin
readln(j);
if max=0
then
begin
writeln(0);
continue;
end;
spfa(j);
for k:=1
to n do
if (ans[k]) or (f[k]then
ifnot ans[k]
then
begin
ans[k]:=true;
max:=max-1;
end;
writeln(max);
end;
end;
begin
init;
main;
end.
外星人入侵
今天是乙個週末,宿舍的人全部都出去玩了,而我因為太懶乙個人留在了宿舍,連床都不起,吃飯靠的是點外賣。不過,為了好玩,我跟著書本學習打了乙個2d小遊戲,並加入了一點自己的東西。一 遊戲頁面 剛開始我把所有的遊戲螢幕設定都放在了下面 裡,這使得 看起來非常長,和雜亂,所以為了使遊戲方便擴充套件和整個 邏...
Pygame 外星人入侵(7)外星人壓境
二 更加合理地移動 三 小結 在之前的博文中,實現了在螢幕上繪製一大群外星人,現在我們想讓這群外星人動起來,它們的移動遵循著一定的規律。我們首先要實現的是,如何讓一群外星人一起向螢幕右側移動。遊戲引數性質的變數統一存放在 設定模組中的設定類中 6 外星人的屬性 6。1 外星人移動的速度 self.a...
外星人入侵 Standard IO
description 外星人入侵地球。可怕的吃人外星人正在全國各地依次序建立它們的基地。全國共有n 1 n 10,000 座城市,城市編號1 n。城市之間有m 0 m 100,000 條雙向道路相連。外星人計畫建立a 0 a n 個基地。你只有在距離當前所有外星人基地至少k 1 k 100 單位長...