結果
| 問題 | No.317 辺の追加 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-12-10 22:34:15 |
| 言語 | Ruby (3.4.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,354 bytes |
| 記録 | |
| コンパイル時間 | 118 ms |
| コンパイル使用メモリ | 7,168 KB |
| 実行使用メモリ | 22,304 KB |
| 最終ジャッジ日時 | 2024-09-15 07:43:18 |
| 合計ジャッジ時間 | 4,327 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge6 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | TLE * 1 -- * 37 |
コンパイルメッセージ
Syntax OK
ソースコード
#! ruby
# yukicoder My Practice
# author: Leonardone @ NEETSDKASU
def gi(); gets.to_i; end
def gis(); gets.chomp.split.map(&:to_i); end
n, m = gis
# 連結成分を検出するためラベリング(?)
grp = [0] * (n + 1)
grp_c = 0
grp_r = []
grp_n = [0]
m.times do
u, v = gis.minmax
next if u == v
gu, gv = grp[u], grp[v]
if gu == 0
if gv == 0
grp[u] = grp[v] = grp_c += 1
grp_r << {grp_c => 1}
grp_n << 2
else
grp[u] = gv
grp_n[gv]+= 1
end
elsif gv == 0
grp[v] = gu
grp_n[gu] += 1
elsif gu != gv
ui, vi = [gu,gv].map{|k| grp_r.index{|o| o.key? k} }.minmax
grp_r[ui].merge! grp_r[vi]
grp_r.delete_at vi
end
end
grp_f = grp_r.inject( [nil]*(grp_c + 1) ){|r, a| k = a.keys; k.each{|x| r[x] = k}; r }
dp = [0] * (n + n)
dp[0] = 1
dp[1] = 2 if grp[1..n].include? 0
(1..grp_c).each do |i|
c = 1
if grp_f[i].nil?
c = grp_n[i]
else
c = grp_f[i].inject(0){|r, j| r + grp_n[j]}
grp_f[i].clear
end
(n-1).downto(0) do |j|
next if dp[j] == 0
if dp[j + c] == 0
dp[j + c] = dp[j] + 1
elsif dp[j] + 1 < dp[j + c]
dp[j + c] = dp[j] + 1
end
end
end
puts dp[1..n].map{|v| v > 0 ? v - 2 : -1} * $/