問題はこちら
問題概要
に対し,
において
は
よりも先に現れる.
解説
ポイント
- 辞書順最小は前から貪欲
- 要素の追加と最小値(最大値)の取得/削除は優先度付きキュー
辞書順最小のものを求める問題は,前から最小のものを置いていく貪欲法で解けます.
この問題も同様に前から数字を置いていきます.
ある数を置くためには
となるすべての
について
が既に置かれている必要があります.
「先に置くべき数」がないようなが置くことができる数となり,置くことができる数のうち最小のものを置いていきます.
ある数を置くと,「先に置くべき数」にある
を考えなくてよくなる(既に置かれた)ので消すことができ,置くことができる(「先に置くべき数」がないような)数が増えていくため,繰り返しこの操作を行ことで解くことができます.
また,置くことができるような数のうち最小のものは優先度付きキューを用いて求めることができます(置くことができる数のリストは要素が増えていき,そのうち最小のものが欲しくなるため).

実際には,各
アルゴリズム
各であるような
を優先度付きキューに入れる.
- 優先度付きキューが空になるまで以下を繰り返す.
- 優先度付きキュー内の最小値
を取り出し
の末尾に挿入する.
が先に置くべき数であるような
の
を
減らす.
- この操作で
になった
を優先度付きキューに入れる.
- 優先度付きキュー内の最小値
の要素が
個なら
を,そうでないなら
を出力する.