C: ウサギとカメ | AtCoder Regular Contest 025

ダイクストラ法っぽいことをする。

(時間、誰(ウサギ、カメ), 場所, 始点)

のようなタプルを優先順位付きキューに入れていく。

まず、

場所=始点、時間0で両者をすべての頂点からスタートさせる。

以降、各始点からの最短経路だけを考える。

今いる場所と始点が異なるとき、カメはその地点のカウンタを1個増やす。

今いる場所と始点が異なるとき、ウサギはカメのカウンタを数える。つまり、先に今いる場所に来た経路を数える。ただし、カメも同じスタート地点から来ている経路だけは取り除く。

全体で

O(NMlog(M))

の時間でなんとか間に合う。