2日かけてできませんでした〜〜〜〜!!!!泣
#問題
https://atcoder.jp/contests/abc146/tasks/abc146_d
#回答
N = gets.to_i
A,B = (N-1).times.map{gets.split.map(&:to_i)}.transpose
C=Array.new(N-1,0)
list=Array.new(N).map{Array.new}
for i in 0..N-2
for j in 1..N
if list[A[i]-1].include?(j)
next
end
if list[B[i]-1].include?(j)
next
end
list[A[i]-1].push(j)
list[B[i]-1].push(j)
C[i] = j
break
end
end
puts C.max,C
#感想
マジで悔しすぎて12時間以上考えたのに解けなくて泣いてる。
上のやり方だと、色を1から順に入れていくので、
1 2 → 1の色
4 5 → 1の色
3 4 → 頂点4で1の色を使っているので2の色
2 3 → 頂点2で1の色、頂点3で2の色を使っているので3の色
で3色必要になってしまうのだが、
実際は
1 2 → 1の色
4 5 → 2の色
3 4 → 1の色
2 3 → 2の色
で2色で良いので、ダメみたい、
なので、幅優先探索ってやつをやる必要があるみたいなのだが、
辺の場所などの保持が分からなくなって頭がパンクしました。おわり