結果

問題 No.1640 簡単な色塗り
コンテスト
ユーザー 小野寺健
提出日時 2021-11-29 14:40:39
言語 Ruby
(4.0.2)
コンパイル:
ruby -w -c _filename_
実行:
ruby _filename_
結果
TLE  
実行時間 -
コード長 705 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 145 ms
コンパイル使用メモリ 8,832 KB
実行使用メモリ 186,884 KB
最終ジャッジ日時 2026-03-23 19:56:31
合計ジャッジ時間 127,037 ms
ジャッジサーバーID
(参考情報)
judge1_1 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 14 RE * 4 TLE * 35
権限があれば一括ダウンロードができます
コンパイルメッセージ
Syntax OK

ソースコード

diff #
raw source code

N = gets.to_i

$G = Array.new(N*2) {Array.new}
$match = Array.new(N*2, -1)

def add_edge(u, v)
	$G[u] << v
	$G[v] << u
end

def dfs(v)
	$used[v] = true
	$G[v].each {|u|
		w = $match[u]
		if w < 0 or (not $used[w] and dfs(w)) then
			$match[v] = u
			$match[u] = v
			return true
		end
	}
	return false
end

def bipartite_matching
	res = 0
	0.upto(2*N-1) {|v|
		if $match[v] < 0 then
			$used = Array.new(N*2, false)
			if dfs(v) then
				res += 1
			end
		end
	}
	return res
end

0.upto(N-1) { |i|
	a, b = gets.split(" ").map{|s| s.to_i}
	add_edge(i, a + N - 1)
	add_edge(i, b + N - 1)
}

n = bipartite_matching

if n == N then
	puts "Yes"
	0.upto(N-1) {|i|
		puts $match[i] - N + 1
	}
else
	puts "No"
end
0