fastapple's blog

時系列関係なく、情報を追記・分割・統合などします。ブログに記載の内容のうち、引用ではなく、私自身が記載している文章・コードなどについては、自由にご利用ください。

dequeを使う際の流れ(自分用)


dequeを使う場合の流れについて、すぐにわからなくなるので、自分なりに書いてみることにした。
ほぼ人の解説コードにコメントを付けただけのコードをコンテスト後にsubmitしたが、今後、根付き木や、dequeを使う上で再利用可能だと思うので、メモを残しておく。
Submission #24164651 - AtCoder Beginner Contest 209

dequeを使う場合の大まかな流れは以下のとおり。

0. まずは、データ構造を準備しておく。根付き木の場合は、隣接リスト。この設問の場合は、各頂点の根からの深さのリストも準備する。
1. 伝播用にdequeに最初の要素を入れる(伝播用確定)
2. dequeから要素の取り出し (dequeのループを定義し、最初で要素を取り出す)
 |   3. 要素を確定する
 |   4. 子ノードのループを作る
 |    |   5. 既に確定しているものは無視する。
 |    |   6. 子ノードを伝播用確定する。

こういう形で実装すればいい。伝播用に取り出すところと、その中で確定させるのがポイント。さらに中では伝播用のことしかしない。
こういう再帰っぽいことを考えるのは、難しいなと思った。これで茶色の上の方らしい。むむむ。