提出 #62153446
ソースコード 拡げる
N,M,S,T = gets.split.map(&:to_i)
E = Array.new(N+1){[]}
M.times{
u,v = gets.split.map(&:to_i)
E[u]<<v
E[v]<<u
}
S2 = lambda{ # S からの距離一覧。T 以降はなし
ds = [nil]*(N+1)
ds[S] = 0
*q = S
while s = q.shift
E[s].each{|t|
if ! ds[t]
ds[t] = ds[s]+1
q<<t
end
} if s!=T
end
next ds
}.call
#warn :ST,[S,T].inspect
#warn :S2,S2.inspect
SP = [T] # S から T への最短パス(の1つ)
until SP[-1]==S
t = SP[-1]
d = S2[t]-1
SP<<E[t].find{|s| S2[s]==d }
end
SP.reverse!
SP? = SP.each_with_index.to_h
#warn :SP,SP.inspect
AP = [0]*N # S から T への代替パスの数(添字は増分)
SP[1..].each{|t|
d0 = S2[t]-1
E[t].each{|s|
if ! SP?[s]
d2 = S2[s]
AP[d2-d0] += 1 if d2
end
}
}
APD = AP.index{0<_1} # 最善の代替パスの最短からの増分
#warn :AP,AP.inspect
#warn :S2T,S2[T]
#warn :APD,APD
S2Y = lambda{ # S から待避場所(Y字分岐路)までの距離
s = S
while s
d = S2[s]+1
s,t2 = E[s].select{|t| ! SP?[t] && S2[t]==d }
break if t2
end
next d if s
}.call
#warn :S2Y,S2Y
T2Y = lambda{ # T から待避場所(Y字分岐路)までの距離
s = T
while s
d = S2[s]+1
s,t2 = E[s].select{|t| ! S2[t] && S2[t] = d }
break if t2
end
next d-S2[T] if s
}.call
#warn :T2Y,T2Y
p([
(2*S2[T]+APD if APD),
(2*S2[T]+4*S2Y if S2Y),
(2*S2[T]+4*T2Y if T2Y)
].tap{
#warn _1.inspect
#warn %w[代替パス Sから待避 Tから待避][_1.index _1.compact.min]
}.compact.min||-1)
提出情報
| 提出日時 | |
|---|---|
| 問題 | D - Moving Pieces on Graph |
| ユーザ | ds14050 |
| 言語 | Ruby (ruby 3.2.2) |
| 得点 | 0 |
| コード長 | 1550 Byte |
| 結果 | WA |
| 実行時間 | 520 ms |
| メモリ | 51352 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||||
|---|---|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 0 / 700 | ||||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_handmade_00.txt, 01_handmade_01.txt, 01_handmade_02.txt, 01_handmade_03.txt, 01_handmade_04.txt, 01_handmade_05.txt, 01_handmade_06.txt, 02_line_00.txt, 02_line_01.txt, 02_line_02.txt, 03_line_like_00.txt, 03_line_like_01.txt, 03_line_like_02.txt, 03_line_like_03.txt, 03_line_like_04.txt, 03_line_like_05.txt, 03_line_like_06.txt, 03_line_like_07.txt, 03_line_like_08.txt, 03_line_like_09.txt, 03_line_like_10.txt, 03_line_like_11.txt, 03_line_like_12.txt, 03_line_like_13.txt, 03_line_like_14.txt, 03_line_like_15.txt, 03_line_like_16.txt, 03_line_like_17.txt, 03_line_like_18.txt, 03_line_like_19.txt, 03_line_like_20.txt, 03_line_like_21.txt, 03_line_like_22.txt, 03_line_like_23.txt, 04_circle_like_00.txt, 04_circle_like_01.txt, 04_circle_like_02.txt, 04_circle_like_03.txt, 04_circle_like_04.txt, 04_circle_like_05.txt, 04_circle_like_06.txt, 04_circle_like_07.txt, 04_circle_like_08.txt, 04_circle_like_09.txt, 05_dense_00.txt, 05_dense_01.txt, 05_dense_02.txt, 06_random_00.txt, 06_random_01.txt, 06_random_02.txt, 06_random_03.txt, 06_random_04.txt, 06_random_05.txt, 06_random_06.txt, 06_random_07.txt, 06_random_08.txt, 06_random_09.txt, 07_uni_00.txt, 07_uni_01.txt, 07_uni_02.txt, 07_uni_03.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_sample_00.txt | AC | 109 ms | 17120 KiB |
| 00_sample_01.txt | AC | 43 ms | 17024 KiB |
| 00_sample_02.txt | AC | 43 ms | 17120 KiB |
| 01_handmade_00.txt | AC | 44 ms | 17144 KiB |
| 01_handmade_01.txt | AC | 45 ms | 17216 KiB |
| 01_handmade_02.txt | AC | 43 ms | 17008 KiB |
| 01_handmade_03.txt | AC | 44 ms | 17156 KiB |
| 01_handmade_04.txt | AC | 43 ms | 17136 KiB |
| 01_handmade_05.txt | AC | 369 ms | 40768 KiB |
| 01_handmade_06.txt | AC | 402 ms | 45460 KiB |
| 02_line_00.txt | AC | 55 ms | 17936 KiB |
| 02_line_01.txt | AC | 379 ms | 39844 KiB |
| 02_line_02.txt | AC | 483 ms | 45756 KiB |
| 03_line_like_00.txt | AC | 286 ms | 35104 KiB |
| 03_line_like_01.txt | AC | 348 ms | 35004 KiB |
| 03_line_like_02.txt | AC | 314 ms | 36980 KiB |
| 03_line_like_03.txt | AC | 281 ms | 36400 KiB |
| 03_line_like_04.txt | AC | 173 ms | 27784 KiB |
| 03_line_like_05.txt | AC | 293 ms | 37784 KiB |
| 03_line_like_06.txt | AC | 163 ms | 27864 KiB |
| 03_line_like_07.txt | AC | 306 ms | 38104 KiB |
| 03_line_like_08.txt | AC | 298 ms | 37204 KiB |
| 03_line_like_09.txt | AC | 306 ms | 33912 KiB |
| 03_line_like_10.txt | AC | 192 ms | 31008 KiB |
| 03_line_like_11.txt | AC | 400 ms | 42532 KiB |
| 03_line_like_12.txt | AC | 321 ms | 40468 KiB |
| 03_line_like_13.txt | AC | 443 ms | 51352 KiB |
| 03_line_like_14.txt | AC | 402 ms | 43000 KiB |
| 03_line_like_15.txt | AC | 220 ms | 30416 KiB |
| 03_line_like_16.txt | AC | 377 ms | 43140 KiB |
| 03_line_like_17.txt | AC | 520 ms | 45648 KiB |
| 03_line_like_18.txt | AC | 50 ms | 17448 KiB |
| 03_line_like_19.txt | AC | 50 ms | 17592 KiB |
| 03_line_like_20.txt | AC | 45 ms | 17480 KiB |
| 03_line_like_21.txt | AC | 45 ms | 17504 KiB |
| 03_line_like_22.txt | AC | 48 ms | 17472 KiB |
| 03_line_like_23.txt | AC | 48 ms | 17588 KiB |
| 04_circle_like_00.txt | AC | 491 ms | 45536 KiB |
| 04_circle_like_01.txt | AC | 417 ms | 40932 KiB |
| 04_circle_like_02.txt | AC | 479 ms | 45372 KiB |
| 04_circle_like_03.txt | AC | 462 ms | 45168 KiB |
| 04_circle_like_04.txt | AC | 410 ms | 41240 KiB |
| 04_circle_like_05.txt | WA | 94 ms | 21188 KiB |
| 04_circle_like_06.txt | AC | 93 ms | 21128 KiB |
| 04_circle_like_07.txt | AC | 96 ms | 21480 KiB |
| 04_circle_like_08.txt | AC | 94 ms | 20704 KiB |
| 04_circle_like_09.txt | AC | 92 ms | 21112 KiB |
| 05_dense_00.txt | AC | 198 ms | 21232 KiB |
| 05_dense_01.txt | AC | 71 ms | 18128 KiB |
| 05_dense_02.txt | AC | 123 ms | 20032 KiB |
| 06_random_00.txt | AC | 224 ms | 32844 KiB |
| 06_random_01.txt | AC | 259 ms | 32152 KiB |
| 06_random_02.txt | AC | 297 ms | 38040 KiB |
| 06_random_03.txt | AC | 290 ms | 37996 KiB |
| 06_random_04.txt | AC | 249 ms | 33872 KiB |
| 06_random_05.txt | AC | 308 ms | 39040 KiB |
| 06_random_06.txt | AC | 255 ms | 33900 KiB |
| 06_random_07.txt | AC | 301 ms | 38500 KiB |
| 06_random_08.txt | AC | 289 ms | 38624 KiB |
| 06_random_09.txt | AC | 295 ms | 39484 KiB |
| 07_uni_00.txt | AC | 186 ms | 31472 KiB |
| 07_uni_01.txt | AC | 86 ms | 21568 KiB |
| 07_uni_02.txt | AC | 319 ms | 40192 KiB |
| 07_uni_03.txt | AC | 300 ms | 41648 KiB |