Submission #62154569


Source Code Expand

Copy
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
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
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

D2Y = lambda{|s|
	ds = [nil]*(N+1)
	ds[s] = 0
	while s
		d = ds[s]+1
		s,t2 = E[s].select{|t| ! SP?[t] && ! ds[t] && ds[t] = d }
		break if t2
	end
	next d if s
}
S2Y = D2Y[S] # S から待避場所(Y字分岐路)までの距離
T2Y = D2Y[T] # T から待避場所(Y字分岐路)までの距離
#warn :S2Y,S2Y
#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)

Submission Info

Submission Time
Task D - Moving Pieces on Graph
User ds14050
Language Ruby (ruby 3.2.2)
Score 700
Code Size 1463 Byte
Status AC
Exec Time 427 ms
Memory 53932 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 700 / 700
Status
AC × 3
AC × 64
Set Name Test Cases
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
Case Name Status Exec Time Memory
00_sample_00.txt AC 146 ms 17068 KB
00_sample_01.txt AC 45 ms 17144 KB
00_sample_02.txt AC 44 ms 17024 KB
01_handmade_00.txt AC 44 ms 17244 KB
01_handmade_01.txt AC 44 ms 17144 KB
01_handmade_02.txt AC 44 ms 17104 KB
01_handmade_03.txt AC 44 ms 17116 KB
01_handmade_04.txt AC 43 ms 17308 KB
01_handmade_05.txt AC 342 ms 42964 KB
01_handmade_06.txt AC 394 ms 48516 KB
02_line_00.txt AC 55 ms 17952 KB
02_line_01.txt AC 365 ms 42836 KB
02_line_02.txt AC 427 ms 48340 KB
03_line_like_00.txt AC 277 ms 39352 KB
03_line_like_01.txt AC 320 ms 39148 KB
03_line_like_02.txt AC 256 ms 38752 KB
03_line_like_03.txt AC 270 ms 39176 KB
03_line_like_04.txt AC 164 ms 29424 KB
03_line_like_05.txt AC 257 ms 40848 KB
03_line_like_06.txt AC 153 ms 29364 KB
03_line_like_07.txt AC 267 ms 41216 KB
03_line_like_08.txt AC 260 ms 40188 KB
03_line_like_09.txt AC 264 ms 36168 KB
03_line_like_10.txt AC 172 ms 32880 KB
03_line_like_11.txt AC 331 ms 45492 KB
03_line_like_12.txt AC 278 ms 43524 KB
03_line_like_13.txt AC 371 ms 53932 KB
03_line_like_14.txt AC 334 ms 43308 KB
03_line_like_15.txt AC 185 ms 31684 KB
03_line_like_16.txt AC 317 ms 46088 KB
03_line_like_17.txt AC 422 ms 48484 KB
03_line_like_18.txt AC 49 ms 17516 KB
03_line_like_19.txt AC 49 ms 17484 KB
03_line_like_20.txt AC 44 ms 17508 KB
03_line_like_21.txt AC 45 ms 17432 KB
03_line_like_22.txt AC 48 ms 17464 KB
03_line_like_23.txt AC 47 ms 17524 KB
04_circle_like_00.txt AC 414 ms 48128 KB
04_circle_like_01.txt AC 338 ms 44148 KB
04_circle_like_02.txt AC 386 ms 47152 KB
04_circle_like_03.txt AC 395 ms 46248 KB
04_circle_like_04.txt AC 358 ms 44020 KB
04_circle_like_05.txt AC 95 ms 21536 KB
04_circle_like_06.txt AC 92 ms 21492 KB
04_circle_like_07.txt AC 92 ms 21540 KB
04_circle_like_08.txt AC 94 ms 21500 KB
04_circle_like_09.txt AC 92 ms 21448 KB
05_dense_00.txt AC 205 ms 21116 KB
05_dense_01.txt AC 70 ms 18132 KB
05_dense_02.txt AC 121 ms 20008 KB
06_random_00.txt AC 209 ms 32464 KB
06_random_01.txt AC 217 ms 33256 KB
06_random_02.txt AC 257 ms 40732 KB
06_random_03.txt AC 253 ms 39548 KB
06_random_04.txt AC 240 ms 35112 KB
06_random_05.txt AC 274 ms 41824 KB
06_random_06.txt AC 242 ms 35100 KB
06_random_07.txt AC 267 ms 41160 KB
06_random_08.txt AC 268 ms 41232 KB
06_random_09.txt AC 270 ms 42312 KB
07_uni_00.txt AC 178 ms 33132 KB
07_uni_01.txt AC 85 ms 21884 KB
07_uni_02.txt AC 288 ms 43420 KB
07_uni_03.txt AC 277 ms 44924 KB


2025-04-24 (Thu)
03:51:38 +00:00