公式
D - 最安通勤ルート / Cheapest Commute Route 解説
by
D - 最安通勤ルート / Cheapest Commute Route 解説
by
physics0523
最短経路問題を解き、駅 \(1\) から駅 \(N\) までの最小運賃と \(K\) との大小を比較すればこの問題に正解できます。
実装例ではダイクストラ法を用いています。
実装例 (C++):
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using pl=pair<ll,ll>;
int main(){
ll n,m,k;
cin >> n >> m >> k;
vector<vector<pl>> g(n+1);
for(ll i=0;i<m;i++){
ll u,v,c;
cin >> u >> v >> c;
g[u].push_back({v,c});
g[v].push_back({u,c});
}
vector<ll> d(n+1,4e18);
priority_queue<pl,vector<pl>,greater<pl>> pq;
d[1]=0;
pq.push({0,1});
while(!pq.empty()){
auto od=pq.top(); pq.pop();
if(d[od.second]!=od.first){continue;}
for(auto [v,c] : g[od.second]){
if(d[v] > d[od.second]+c){
d[v]=d[od.second]+c;
pq.push({d[v],v});
}
}
}
if(d[n]>k){cout << "-1\n";}
else{cout << d[n] << "\n";}
return 0;
}
投稿日時:
最終更新:
