結果
問題 |
No.241 出席番号(1)
|
ユーザー |
|
提出日時 | 2024-05-08 00:29:09 |
言語 | Ruby (3.4.1) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,364 bytes |
コンパイル時間 | 480 ms |
コンパイル使用メモリ | 7,296 KB |
実行使用メモリ | 12,544 KB |
最終ジャッジ日時 | 2024-11-30 21:47:07 |
合計ジャッジ時間 | 6,125 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 17 RE * 12 |
コンパイルメッセージ
Main.rb:39: warning: assigned but unused variable - numarr Main.rb:53: warning: assigned but unused variable - r Syntax OK
ソースコード
#!/usr/local/bin/ruby class BipartiteMatching def initialize(n,adj) @n,@adj = n,adj # adj is already satisfied with bipartite property. end private def dfs(v) rop = false @visited[v] = true @adj[v].each do |u| w = @match[u] if w.nil? || (@visited[w].nil? && dfs(w)) rop,@match[v],@match[u] = true,u,v break end end rop end public def matching #kuhn algorithm: # Start by unsaturated vertex, find an augmenting path, update the matching. r = 0 @match = Array.new(@n) (0...@n).each do |i| unless @match[i] @visited = Array.new(@n) if dfs(i) r+=1 end end end [r,@match] end end class StudentNumber def initialize(*arg) @n,@a, = arg numarr = (@n...2*@n).to_a @adj = Array.new(2*@n){Array.new} (0...@n).each do |i| (0...@a[i]).each do |j| @adj[i].push(@n+j) @adj[@n+j].push(i) end (@a[i]+1...@n).each do |j| @adj[i].push(@n+j) @adj[@n+j].push(i) end end end def ans r,marr = BipartiteMatching.new(2*@n,@adj).matching if marr.any?(nil) [-1] else marr[0,@n].map{_1-@n} end end end ### END: class StudentNumber iod = STDIN n = iod.gets.to_i a = Array.new(n){iod.gets.to_i} puts StudentNumber.new(n,a).ans exit 0