# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1187983 | pxsit | 악어의 지하 도시 (IOI11_crocodile) | C++20 | 0 ms | 0 KiB |
#include <bits/extc++.h>
using namespace std;
typedef long long ll;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int n,m,k;
cin>>n>>m>>k;
vector<vector<pair<int,ll>>> g(n);
for(int i=0;i<m;i++){
int u,v; ll w;
cin>>u>>v>>w;
g[u].emplace_back(v,w);
g[v].emplace_back(u,w);
}
const ll INF = 4e18;
vector<ll> b1(n,INF), b2(n,INF), f(n,INF);
priority_queue<pair<ll,int>, vector<pair<ll,int>>, greater<pair<ll,int>>> pq;
for(int i=0;i<k;i++){
int p; cin>>p;
b1[p]=0;
f[p]=0;
pq.emplace(0,p);
}
while(!pq.empty()){
auto [d,u]=pq.top(); pq.pop();
if(d!=f[u]) continue;
if(u==0) break;
for(auto &e:g[u]){
int v=e.first;
ll nc=d+e.second;
ll old2=b2[v];
if(nc<b1[v]){
b2[v]=b1[v];
b1[v]=nc;
} else if(nc<b2[v]){
b2[v]=nc;
} else continue;
if(b2[v]<f[v] && b2[v]<INF){
f[v]=b2[v];
pq.emplace(f[v],v);
}
}
}
cout<<f[0]<<"\n";
return 0;
}