AOJ 2371 TransferTrain
概要
電車で目的地まで行くための最短経路を求めるというよくある感じの問題。
本の路線がありそれぞれの路線は個の駅からなる。 一つの路線について駅とそれらの間の所要時間が与えられる。 電車は両方向にあるのでどちら向きに移動しても良い。
また、同じ駅が複数回現れる (異なる路線はもちろん、同じ路線でもありうる)とき、その駅は乗り換え駅で、時間で乗り換えることができる。
このとき今いる駅から目的駅までの最短時間と乗り換え回数を求めよ。最短経路が複数あるときは乗り換え回数が最小のものを求めよ。
制約:
解法
普通に路線ごとにと辺を張る。 辺のコストは(かかる時間、乗り換え回数)を表している。
乗り換えのために同じ駅同士でコストの辺を張ると辺の数が大きくなりすぎるので次のように工夫する。 駅名に対して一つ頂点を作っておき、駅が現れるごとにと のように辺を張る。
後は普通にDijkstraする。スタートとゴールがのとき上に対応するのはになる。 また、乗り換えを一回余分に数えている (の部分) のでそれを引いたものが答え。