公式
D - 最安経路 / Cheapest Route 解説
by
D - 最安経路 / Cheapest Route 解説
by
physics0523
この問題は標準的な最短経路問題です。
問題文の指示通りグラフを構築し、空港のある都市全てを距離 \(0\) として最短経路問題を解けばよいです。
実装例ではダイクストラ法を用いています。
実装例 (C++):
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using pl=pair<ll,ll>;
using Graph=vector<vector<pl>>;
int main(){
ll N,K,P;
cin >> N >> K >> P;
vector<ll> M(N);
for(auto &nx : M){cin >> nx;}
Graph g(N);
for(ll i=0;i<K;i++){
ll U,V;
cin >> U >> V;
U--; V--;
g[U].push_back({V,M[U]*M[V]});
g[V].push_back({U,M[U]*M[V]});
}
vector<ll> d(N,4e18);
priority_queue<pl,vector<pl>,greater<pl>> pq;
for(ll i=0;i<P;i++){
ll E;
cin >> E;
E--;
d[E]=0;
pq.push({0,E});
}
while(!pq.empty()){
auto od=pq.top(); pq.pop();
if(od.second==0){
cout << od.first << "\n";
return 0;
}
if(d[od.second]!=od.first){continue;}
for(auto &nx : g[od.second]){
if(d[nx.first]>od.first+nx.second){
d[nx.first]=od.first+nx.second;
pq.push({d[nx.first],nx.first});
}
}
}
return 0;
}
投稿日時:
最終更新:
