結果

問題 No.3514 Majority Driven Tree
コンテスト
ユーザー tomerun
提出日時 2026-04-24 22:23:05
言語 Crystal
(1.19.1)
コンパイル:
crystal build -Donline_judge -o a.out --release --no-debug _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 1,099 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 14,358 ms
コンパイル使用メモリ 338,012 KB
実行使用メモリ 6,400 KB
最終ジャッジ日時 2026-04-24 22:23:24
合計ジャッジ時間 15,709 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge4_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other WA * 37
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

n = read_line.to_i
g = Array.new(n) { [] of Int32 }
(n - 1).times do
  a, b = read_line.split.map(&.to_i)
  g[a - 1] << b - 1
  g[b - 1] << a - 1
end
q = [0]
parent = Array.new(n, -1)
n.times do |i|
  cur = q[i]
  g[cur].each do |adj|
    next if parent[cur] == adj
    parent[adj] = cur
    q << adj
  end
end
is_leaf = Array.new(n) { |i| g[i].size == 1 && i != 0 }
color = Array.new(n, 0)
ans = 0
(n - 1).downto(0) do |i|
  cur = q[i]
  next if is_leaf[cur]
  par = parent[cur]
  cnt_black = 0
  cnt_leaf = 0
  g[cur].each do |adj|
    next if par == adj
    if color[adj] == 1
      cnt_black += 1
    end
    if is_leaf[adj]
      cnt_leaf += 1
    end
  end
  if cnt_black * 2 > g[cur].size
    paint(cur, g, parent, color)
  elsif cnt_leaf >= 2
    ans += 1
    paint(cur, g, parent, color)
  end
end

n.times do |i|
  cur = q[i]
  if color[cur] == 0
    ans += 1
    paint(cur, g, parent, color)
  end
end

puts ans

def paint(cur, g, parent, color)
  return if color[cur] == 1
  color[cur] = 1
  g[cur].each do |adj|
    next if parent[cur] == adj
    paint(adj, g, parent, color)
  end
end
0