結果

問題 No.177 制作進行の宮森あおいです!
ユーザー gigurururu
提出日時 2015-04-03 11:27:24
言語 Ruby
(3.4.1)
結果
AC  
実行時間 119 ms / 2,000 ms
コード長 2,374 bytes
コンパイル時間 45 ms
コンパイル使用メモリ 7,296 KB
実行使用メモリ 14,464 KB
最終ジャッジ日時 2024-12-26 02:56:01
合計ジャッジ時間 2,578 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 13
権限があれば一括ダウンロードができます
コンパイルメッセージ
Main.rb:75: warning: assigned but unused variable - m
Main.rb:76: warning: assigned but unused variable - sum
Syntax OK

ソースコード

diff #
プレゼンテーションモードにする

#
class MaxFlow
def initialize
@node={}#Hash.new{|h,k|h[k]=[]}
end
#
def add_node(name)
@node[name]||=Hash.new{0}
end
#
# costINF
def add_edge(src,dst,cost)
add_node(src)
add_node(dst)
@node[src][dst]=cost
end
# srcdst
# (YAML)
# --
# [src1]:
# [dst1]: [src1->dst1 cost]
# [dst2]: [src1->dst2 cost]
# [dst3]: [src1->dst3 cost]
# [src2]:
# [dst1]: [src2->dst1 cost]
# [dst2]: [src2->dst2 cost]
# [dst3]: [src2->dst3 cost]
def maxflowgraph(src,dst)
residual=Hash[@node.map{|k,v|[k,v.dup]}]
while true
# srcdst
#p residual
pre={}
q=[src]
while q[0] && !pre[dst]
sr=q.shift
residual[sr]&&residual[sr].each{|d,c|
pre[d]||=(q << d;sr)
}
end
# dst
break if !pre[dst]
path=[]
ds=dst
co=residual.values.flat_map(&:values).max
#
while ds!=src
#p ds
sr=pre[ds]
co=[residual[sr][ds],co].min
path.unshift [sr,ds]
ds=sr
end
#
path.each{|s,d|
residual[s][d]-=co
if residual[s][d]==0
residual[s].delete(d)
end
residual[d][s]+=co
}
end
Hash[@node.map{|k,v|[k,Hash[v.map{|d,c|[d,c-residual[k][d]]}]]}]
end
# srcdst
def maxflow(src,dst)
graph=maxflowgraph(src,dst)
graph[src]?graph[src].values.inject(:+):0
end
end
(w,),(n,),j,(m,),c,*q=$<.map{|l|l.split.map(&:to_i)}
sum=0
mf=MaxFlow.new
INF=1000000
j.each.with_index(1){|a,i|
mf.add_edge(:src,:"j#{i}",a)
}
c.each.with_index(1){|a,i|
mf.add_edge(:"c#{i}",:sink,a)
}
q.each.with_index(1){|(_,*x),i|
([*1..n]-x).each{|j|
mf.add_edge(:"j#{j}",:"c#{i}",INF)
}
}
puts w>mf.maxflow(:src,:sink)?"BANSAKUTSUKITA":"SHIROBAKO"
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0