システムテスト→Passed以下、ソースです。→ダメだ、計算量が多すぎる→順番を変えたりしたらいけるんじゃないか→ダメだ、どう考えても計算量が減らせない→うーん・・色々考えていたら30分も経ってしまった→DPばかり考えるとダメだな。→とりあえずダイクストラで最短経路を求めてみるか→実はあるノードに同じコストで到達できる数を数えて適当に掛けあわせれば答え出るのでは→何を数えれば良いか・・・ん・・全ノードにつき、同コストで到達する親の数を数えれば良いか→あとは、全ノードの親の数を掛けあわせれば、それが解となりそうだ→合ってるのかな。→書く→サンプル通る→10分くらいで書けてしまった。普通のダイクストラに、親の数を数える1文を追加しただけだし、実装が簡単すぎる。→うーん・・頭が回らない。→・・・やっぱり合ってるよね。(不安)チャレンジフェーズ→何度か攻撃されるものの耐える。→意外と普通に通るかもしれんなぁ。システムテスト→Failed→やっぱり。(泣)何を間違ったんだろう。→あーーー・・・ダイクストラの変形の仕方が間違ってる。queueを使ったダイクストラでは、次のノードへのエッジをキューに入れていく。同じノードへ到達できるより小さなコストのエッジが見つかった場合、前に見つかったエッジを破棄し、新たなエッジをキューに入れる。この破棄の際に、これまでに数えた親の数もリセットして1に戻さないといけない。→んー・・・単純な間違いがないことは一通り確認したが、この辺まで深く考えてなかった。→ダイクストラなどは元々複雑なことをやっているので、変形には細心の注意を払わなければ・・・それにしても、DPをあきらめてグラフ最短路のアプローチへ移行するのが遅すぎました。視野を広げてさまざまなアプローチを試すというところはできてきましたが、よりBFS的に早めに切り替えていかなければいけないかな。以下、修正したソースです。OpenTipsDiv1SRM455SRM456SRM457SRM466SRM467SRM468SRM469SRM470SRM471SRM473SRM474SRM475SRM476SRM477SRM478SRM479SRM480SRM481SRM482SRM483SRM484SRM485SRM486SRM487SRM488SRM489SRM490SRM491SRM492SRM493SRM494SRM495SRM496SRM497SRM498SRM499SRM500SRM502SRM503SRM505SRM504.5SRM506SRM507SRM508SRM510SRM511SRM512SRM513SRM514SRM515SRM516SRM517SRM518SRM519SRM520SRM521SRM522SRM523SRM524SRM525SRM526SRM527SRM526.5SRM528SRM529SRM530SRM531SRM532SRM533SRM534SRM535SRM536SRM537SRM538SRM540SRM541SRM543カウンター358000リンク集SigmarのProfile。