この問題を解いていたのですが、解説を見て少し分からないところがありました
解説には、深さ優先探索を使って、Kから各地点への最短路を前計算する、とありますが、そこのサンプルコードが良くわかりません
c++
1void dfs(ll v,ll p,ll d){ 2 depth[v]=d; 3 for(auto &e : tree[v]){ 4 if(e.to==p)continue; 5 dfs(e.to,v,d+e.cost); 6 } 7 8} 9 10... 11 12 13dfs(k,-1,0);
やっていることとしては、移動できる地点へ移動してコストを足していく、前の地点と移動したい地点が同じならcontinue、ということで目的地までの経路が求まるのは分かるのですが、どうしてこれで「最短経路」が求まるのでしょうか
感覚的には初めのdepthのところで、depth[v]=min(depth[v],d);という風になるように感じます
後から計算した数値の方が高い値になることはないのでしょうか
どなたか分かる方よろしくお願いします
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/14 07:13
2019/04/14 11:36 編集