8 17 想越獄的小杉 1535

2021-08-07 02:05:12 字數 2626 閱讀 7737

背景 background

這次小杉來到了經典美劇《越獄》的場景裡……

他被抓起來了(-.-幹嘛幻想這麼鬱悶的場景……)。

小杉身為新一代的scofield,在挖了半個月之後終於挖通牢房裡的地道。

在地道裡,無數的管道路線困惑了他。

(若對情節有任何疑問,請**原劇)

描述description

小杉看了看自己的紋身,明白了整個管道網是由n個小房間和若干小房間之間的單向的管道組成的。

小房間編號為不超過n的正整數。

每個管道都有乙個人品限制值,小杉只能在人品不超過該限制值時通過。

小杉一開始在房間1,現在小杉想知道,每個小房間他最多能夠以人品多少的狀態到達。

注意,小杉的人品在出發以後是不會改變的。

第一行有乙個正整數n(1<=n<=2000)。

接下來若干行描述管道,每行三個正整數a,b,r(1<=a,b<=n,1<=r<1e5,a!=b),表示a房間有一條到達b房間的人品限制值為r的管道(注意從b房間不可由此管道到達a房間,即管道是單向的,每組a,b至多只出現一次)。

整個輸入資料以一行000結束。

對每組測試資料輸出n-1行,分別表示對於2到n號的小房間,小杉最多能夠以人品多少的狀態到達。若某房間小杉不能到達,請輸出0。

4 1 2 30

1 3 20

2 3 25

3 4 30

2 4 20

0 0 0

30 25

25注釋hint

對於樣例資料:

小杉最多能夠在人品為30的情況下到達小房間2(1->2)

小杉最多能夠在人品為25的情況下到達小房間3(1->2->3)

小杉最多能夠在人品為25的情況下到達小房間4(1->2->3->4)

很顯然是最短路,我打了乙個spfa

和普通的spfa不同的地方在於

if

d[x]+w

[k][y]then

換成了

if

min(d[v[(h-1) mod

max+1]],w[k])>d[y[k]] then

剛開始擔心爆記憶體,算了老半天,省了所有能省的記憶體,結果沒爆,其實就算不省也不會爆……

longint 4位元組 int64 8位元組時間

複雜度o

(km)

m為邊的

條數,最

大為n2

,k為小

常數

const

max=2000;

var n,i,j,k,t:longint;

w:array[1..4000000]of longint;

y,ne:array[1..4000000]of integer;

d,ls:array[1..2000]of longint;

b:array[1..2000]of boolean;

v:array[1..2000]of longint;

function

min(a,b:longint):longint;

begin

if athen

exit(a) else

exit(b);

end;

procedure

spfa;

var i,j,k,h,t:longint;

begin

fillchar(b,sizeof(b),true);

h:=0;t:=1;v[1]:=1;b[1]:=false;d[1]:=maxlongint;

while hdo

begin

inc(h);

k:=ls[v[(h-1) mod max+1]];

while k>0

dobegin

if min(d[v[(h-1) mod max+1]],w[k])>d[y[k]] then

begin

d[y[k]]:=min(d[v[(h-1) mod max+1]],w[k]);

if b[y[k]] then

begin

b[y[k]]:=false;

inc(t);

v[(t-1) mod max+1]:=y[k];

end;

end;

k:=ne[k];

end;

b[v[(h-1) mod max+1]]:=true;

end;

end;

begin

readln(n);

readln(i,j,k);

while (i<>0)and(j<>0)and(k<>0)do

begin

if j=1

then

begin readln(i,j,k);continue;end;

inc(t);

y[t]:=j;w[t]:=k;ne[t]:=ls[i];

ls[i]:=t;

readln(i,j,k);

end;

spfa;

for i:=2

to n do

writeln(d[i]);

end.

spfa SSL 1535 想越獄的小杉

description 小杉看了看自己的紋身,明白了整個管道網是由n個小房間和若干小房間之間的單向的管道組成的。小房間編號為不超過n的正整數。每個管道都有乙個人品限制值,小杉只能在人品不超過該限制值時通過。小杉一開始在房間1,現在小杉想知道,每個小房間他最多能夠以人品多少的狀態到達。注意,小杉的人品...

Vijos P1391 想越獄的小杉

背景 這次小杉來到了經典美劇 越獄 的場景裡 他被抓起來了 幹嘛幻想這麼鬱悶的場景 小杉身為新一代的scofield,在挖了半個月之後終於挖通牢房裡的地道。在地道裡,無數的管道路線困惑了他。若對情節有任何疑問,請 原劇 描述小杉看了看自己的紋身,明白了整個管道網是由n個小房間和若干小房間之間的單向的...

想越獄的小衫

故事背景 這次小杉來到了經典美劇 越獄 的場景裡 他被抓起來了 幹嘛幻想這麼鬱悶的場景 小杉身為新一代的scofield,在挖了半個月之後終於挖通牢房裡的地道。在地道裡,無數的管道路線困惑了他。若對情節有任何疑問,請 原劇 問題描述 小杉看了看自己的紋身,明白了整個管道網是由n個小房間和若干小房間之...