130 likes | 498 Views
JOI 春合宿 2010 Day 3 本選会場 (Finals). 秋葉 拓哉. 問題概要. 本選を開催する K 個の都市を選択する 全ての都市の代表選手を都市に集める最適な方法は? コストは距離のみにより,一度に複数人移動できる. k = 2. 部分点. まず, K = 1 の場合を考えます. 考察 (1/ 3 ). 同じ道を 2 度移動する必要はない 待ってて,一緒に行ったほうが得 移動の経路は,(有向)木になる. 考察 (2/3). 本戦会場をどこにするかは重要でない どこを本戦会場にしても同じコストで達成可. 考察 (3/3).
E N D
問題概要 • 本選を開催する K 個の都市を選択する • 全ての都市の代表選手を都市に集める最適な方法は? • コストは距離のみにより,一度に複数人移動できる k = 2
部分点 まず, K = 1 の場合を考えます
考察 (1/3) • 同じ道を 2 度移動する必要はない • 待ってて,一緒に行ったほうが得 • 移動の経路は,(有向)木になる
考察 (2/3) • 本戦会場をどこにするかは重要でない • どこを本戦会場にしても同じコストで達成可
考察 (3/3) • コストを考える際には方向を考えなくてよい
最小全域木 • 全部の頂点を繋ぐ,コスト最小の木 • グラフの基礎的な問題
Kruskalのアルゴリズム • 最小全域木を求めるアルゴリズム • 他に Prim のアルゴリズムというものも有名 • N 要素の Union-Find を用意 • 辺を短い順にソートし,加えてゆく • 辺の2 端点が既に連結なら,加えない • そうでなければ,加える • この際,Union-Find を用いて連結性を管理
K > 1 の場合 (1/2) • 最小全域木から一番長い辺 1 本を取り除くと,2 つの木に分裂 • 本選会場が 2 つの場合に対応
K > 1 の場合 (2/2) • 最小全域木の辺を短い方から N-K 本使う • Kruskalのアルゴリズムを途中で止める • Single-Link Clustering
コーナーケース • 全部の都市を本戦会場にできる • 移動のコスト0 K = N の場合