Submission #26833318


Source Code Expand

$debug = false
def no!; puts'No'; exit end

N = gets.to_i
E = Array.new(N){[]}
(N-1).times{
	a,b = gets.split.map{_1.to_i-1}
	E[a] << b
	E[b] << a
}
V = [nil]*N
K = gets.to_i.times.map{
	gets.split.map(&:to_i).then{|v,p|
		V[v-=1] = 0,p
		next v,p
	}
}

D = E.map(&:size)
Q = N.times.select{|v| D[v]<2 }
while a = Q.pop
	D[a] -= 1
	break unless p = E[a].find{|b,| 0<D[b] }
	Q << p if 1 == D[p] -= 1
	(d,v),(pd,pv) = V[a],V[p]
	next unless d
	if pd
		dd,dv = d+1+pd,(v-pv).abs
		no! if dd<dv || dd&1!=dv&1
		if dv <= (d+1-pd).abs
			V[p] = d+1,v if d < pd
		else
			d += 1
			if d<pd
				pv -= (pd-d)*(pv<=>v)
				pd = d
			else
				v -= (d-pd)*(v<=>pv)
				d = pd
			end
			V[p] = d-(v-pv).abs/2,(v+pv)/2
		end
#warn [a,V[a],p,V[p]].inspect if (dd,dv = V[a].zip(V[p]).then{[_1.sum+1,_2.inject(:-).abs]}) and dd<dv || 0<(dd-dv)&1
	else
		V[p] = d+1,v
	end
end
warn'!!!' if $debug && K.any?{|v,p| V[v] != [0,p] }

V[a] = V[a].sum
Q << a
while a = Q.pop
	v = V[a]
	E[a].each{|b|
		db,vb = V[b]
		next if db && ! vb
		if db
			V[b] = (vb-v).abs<db+1 ? v-(v<vb ? 1:-1) : v+(v<vb ? 1:-1)
#warn [[a,v],b,V[b],[db,vb]].inspect if V[b] != vb+db && V[b] != vb-db
		else
			V[b] = 0<v ? v-1 : v+1
		end
		Q << b
	}
end

if $debug
	warn'!' if N.times.any?{|a|
		E[a].any?{|b| (V[a]-V[b]).abs != 1 }
	}
	warn'!!' if K.any?{|v,p| V[v] != p }
end

puts'Yes',V

Submission Info

Submission Time
Task E - Integers on a Tree
User ds14050
Language Ruby (2.7.1)
Score 800
Code Size 1419 Byte
Status AC
Exec Time 463 ms
Memory 35648 KiB

Judge Result

Set Name sample All
Score / Max Score 0 / 0 800 / 800
Status
AC × 3
AC × 39
Set Name Test Cases
sample sample_01.txt, sample_02.txt, sample_03.txt
All binary_01.txt, binary_02.txt, hand_01.txt, hand_02.txt, hand_03.txt, kary_01.txt, kary_02.txt, kary_03.txt, line_01.txt, line_02.txt, line_03.txt, line_04.txt, line_05.txt, line_06.txt, random0_01.txt, random1_01.txt, random1_02.txt, random1_03.txt, random1_04.txt, random1_05.txt, random1_06.txt, random1_07.txt, random1_08.txt, random2_01.txt, random2_02.txt, random2_03.txt, random2_04.txt, random2_05.txt, random2_06.txt, random3_01.txt, random3_02.txt, random4_01.txt, random4_02.txt, random4_03.txt, sample_01.txt, sample_02.txt, sample_03.txt, star_01.txt, star_02.txt
Case Name Status Exec Time Memory
binary_01.txt AC 335 ms 31996 KiB
binary_02.txt AC 210 ms 26260 KiB
hand_01.txt AC 59 ms 14256 KiB
hand_02.txt AC 57 ms 14288 KiB
hand_03.txt AC 57 ms 14172 KiB
kary_01.txt AC 167 ms 24580 KiB
kary_02.txt AC 269 ms 30316 KiB
kary_03.txt AC 193 ms 30568 KiB
line_01.txt AC 165 ms 24348 KiB
line_02.txt AC 264 ms 23968 KiB
line_03.txt AC 273 ms 27104 KiB
line_04.txt AC 306 ms 31920 KiB
line_05.txt AC 205 ms 26932 KiB
line_06.txt AC 236 ms 28168 KiB
random0_01.txt AC 203 ms 29988 KiB
random1_01.txt AC 296 ms 25948 KiB
random1_02.txt AC 297 ms 25952 KiB
random1_03.txt AC 320 ms 28592 KiB
random1_04.txt AC 368 ms 33628 KiB
random1_05.txt AC 292 ms 25864 KiB
random1_06.txt AC 292 ms 26268 KiB
random1_07.txt AC 309 ms 26416 KiB
random1_08.txt AC 463 ms 35492 KiB
random2_01.txt AC 181 ms 26032 KiB
random2_02.txt AC 218 ms 26196 KiB
random2_03.txt AC 210 ms 26344 KiB
random2_04.txt AC 207 ms 26396 KiB
random2_05.txt AC 235 ms 29904 KiB
random2_06.txt AC 303 ms 35648 KiB
random3_01.txt AC 213 ms 26288 KiB
random3_02.txt AC 237 ms 30024 KiB
random4_01.txt AC 286 ms 25836 KiB
random4_02.txt AC 291 ms 25736 KiB
random4_03.txt AC 292 ms 26260 KiB
sample_01.txt AC 56 ms 14104 KiB
sample_02.txt AC 55 ms 14264 KiB
sample_03.txt AC 55 ms 14252 KiB
star_01.txt AC 314 ms 29508 KiB
star_02.txt AC 200 ms 29664 KiB