m : 解説

13

Click here to load reader

Upload: takumi-yamashita

Post on 11-Apr-2017

22 views

Category:

Education


0 download

TRANSCRIPT

Page 1: M : 解説

Problem M : Dial怒髪@dohatsutsu

Page 2: M : 解説

問題概要

条件が複雑なので、問題文を参照してください。

Page 3: M : 解説

解法

問題文のsample 2 ならば、次のようなグラフの辞書順最小の最小カットを求めればよ

いです。

sample input 2

357567575870d351

sample ouput 2

20d35157577

Page 4: M : 解説

57557 57577

fd351 1d351

57597 S T

57567

57587

0d351

Page 5: M : 解説

57557 57577

fd351 1d351

57597 S T

57557

57597

fd351 1d351

57577

57567

57587

0d351

Page 6: M : 解説

S T

57557

57597

fb351 1b351

57577

57567

57587

0b351

たとえば、南京錠で57577を入力すると、57567と、57587の2つの候補を同時に試すことができます。

実際にこのグラフで57577というエッジを削除すると、それは実質的に、57567と、57587の2つのエッジを削除したものと考えることができます。

Page 7: M : 解説

S T

57557

57597

fb351 1b351

57577

57567

57587

0b351

辞書順最小の最小カットを求めるためにはどうすればよいでしょうか?

エッジを1つずつ辞書順にみていき、そのエッジが最小カットに使用されるかどうかを判定し、それが使用されるならばそのエッジをグラフから削除しつつ、答えとして出力するようにすればよいです。

Page 8: M : 解説

S T

57557

57597

fb351 1b351

57577

57567

57587

0b351

あるエッジがそのグラフの最小カットに含まれるかどうかを調べるには、そのエッジを削除してできた新しいグラフの最大流が、元グラフの最大流より小さいかどうかを判定すればよいです。

Page 9: M : 解説

S T

57557

57597

fb351 1b351

57567

57587

0b351

実際にエッジ57577を削除すると、このグラフの最大流は減ってしまっています。

Page 10: M : 解説

解説

愚直に1つずつ削除しては最大流を求めるということを繰り返した場合、

最大流を求めるアルゴリズムをN回行うこととなり、これではTLEになってしまいます。

Page 11: M : 解説

解説

あるエッジを削除してグラフが変形されたとき、グラフの最大流量が変化するかどうかの

判定はO(N)で行うことができます。

これは蟻本のp193にのっています。

なのでこの問題は O(N^2) で解くことができます。

Page 12: M : 解説

講評

AC数 ÷ 提出数 = 0÷0

First AC

なし

Page 13: M : 解説

テスター

dohatsu c++ 159行 0.05秒

sate c++ 243行 1.87秒

beet c++ 215行 1.32秒

定数倍がきついので注意が必要です。