rupc2017:e解説

9
E: Tangled Cables 原案・解説: 胡桃沢(@ukuku09)

Upload: takumi-yamashita

Post on 05-Apr-2017

8 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: RUPC2017:E解説

E: Tangled Cables原案・解説: 胡桃沢(@ukuku09)

Page 2: RUPC2017:E解説

問題概要• n頂点m辺の連結なグラフが与えられる

• 辺にはciとdiの二つのパラメータがある

• いくつかの辺を取り除いて全域木をつくる

➡全域木:グラフ上の任意の2頂点が連結な木

• 取り除く辺の∑di/∑ciの最小値は?

Page 3: RUPC2017:E解説

考察

• 取り除かない辺について考えてみる

• 最小全域木のアルゴリズムが使えそう

• di/ciの大きい順に辺を使っていけばよいか?

➡これはいいえ

Page 4: RUPC2017:E解説

考察• 今、取り除く辺の∑di/∑ci=2000/1000

• (ci,di)=(10,7)の辺eと(ci,di)=(100,75)の辺fのうち、どちらか一方だけ取り除ける

• di/ciが大きいほう(辺f)を全域木に使う?

➡辺eを取り除くと∑di/∑ci=2007/1010=1.98712…

★辺fを取り除くと∑di/∑ci=2075/1100=1.8863…

Page 5: RUPC2017:E解説

解説

• 求める答えをtとすると、

• ∑di / ∑ci ≦ t → ∑(di - t*ci) ≦ 0

• di-t*ciは辺ごとに独立して考えられる

Page 6: RUPC2017:E解説

解説• di/ci≦t(di-t*ci≦0)であるような辺

➡もし全部取り除いても∑di/∑ci≦t

• di/ci>t(di-t*ci>0)であるような辺

➡できるだけ取り除かない

➡全域木に使う

Page 7: RUPC2017:E解説

解説

• 答え t を二分探索 + Kruskal法

• 辺はdi-t*cで降順ソート

• 全域木に使わなかった辺の∑di/∑ci≦tならOK!

• 最小比全域木問題(赤線部が逆)

Page 8: RUPC2017:E解説

ジャッジ解

• arrows(C++): 130 lines

• haji(C++): 76 lines

• uku(C++): 107 lines

Page 9: RUPC2017:E解説

結果

• First Submission • Online: toy18 102 min

• First Accepted • On-site: toy18 107 min

• Success Rate: 21.74 % (10/46)