解決策 - すべてのエッジをトラバースし、偶数エッジの数を数えます
ツリーからエッジを削除した結果、頂点の数が偶数の 2 つのツリーになった場合、そのエッジを偶数エッジと呼びましょう。
ツリーからエッジを削除した結果、頂点の数が奇数の 2 つのツリーができた場合、そのエッジを奇数エッジと呼びましょう。
これがRubyでの私のソリューションです
num_vertices, num_edges = gets.chomp.split(' ').map { |e| e.to_i }
graph = Graph.new
(1..num_vertices).to_a.each do |vertex|
graph.add_node_by_val(vertex)
end
num_edges.times do |edge|
first, second = gets.chomp.split(' ').map { |e| e.to_i }
graph.add_edge_by_val(first, second, 0, false)
end
even_edges = 0
graph.edges.each do |edge|
dup = graph.deep_dup
first_tree = nil
second_tree = nil
subject_edge = nil
dup.edges.each do |e|
if e.first.value == edge.first.value && e.second.value == edge.second.value
subject_edge = e
first_tree = e.first
second_tree = e.second
end
end
dup.remove_edge(subject_edge)
if first_tree.size.even? && second_tree.size.even?
even_edges += 1
end
end
puts even_edges
注 -ここをクリックして、Graph、Node、および Edge クラスのコードを確認してください。