結果
問題 | No.421 しろくろチョコレート |
ユーザー |
![]() |
提出日時 | 2016-09-21 00:03:05 |
言語 | Ruby (3.4.1) |
結果 |
AC
|
実行時間 | 518 ms / 2,000 ms |
コード長 | 1,299 bytes |
コンパイル時間 | 326 ms |
コンパイル使用メモリ | 7,424 KB |
実行使用メモリ | 16,512 KB |
最終ジャッジ日時 | 2024-09-23 07:09:30 |
合計ジャッジ時間 | 9,822 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 65 |
コンパイルメッセージ
Syntax OK
ソースコード
# Here your code ! V = [] G = Hash.new {|h,k| h[k] = [] } def add_virt(color) v = V.size V << color v end def add_edge(u,v) G[u] << v G[v] << u end def dfs(u, matches, used = Array.new(V.size)) used[u] = true G[u].find do |v| w = matches[v] if !w || (!used[w] && dfs(w, matches, used)) matches[u] = v matches[v] = u true end end end def matching matches = Array.new(V.size) V.size.times.inject(0) do |s, v| s += 1 if !matches[v] && dfs(v, matches) s end end n, m = gets.split.map(&:to_i) map = n.times.map do gets.chomp end vmap = Array.new(n) { Array.new(m,nil) } n.times do |y| m.times do |x| if map[y][x] == 'w' vmap[y][x] = add_virt(:w) elsif map[y][x] == 'b' vmap[y][x] = add_virt(:b) end end end n.times do |y| m.times.each_cons(2) do |a,b| if vmap[y][a] && vmap[y][b] add_edge(vmap[y][a], vmap[y][b]) end end end m.times do |x| n.times.each_cons(2) do |a,b| if vmap[a][x] && vmap[b][x] add_edge(vmap[a][x], vmap[b][x]) end end end a,b = [:w,:b].map{|color| V.count(color) }.sort c = matching puts c * 100 + (a - c) * 10 + (b - a)