# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1236516 | punjabilassi03 | Crocodile's Underground City (IOI11_crocodile) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#include <cctype>
using namespace std;
#define int long long
#define vi vector<int>
#define vll vector<long long>
#define vpii vector<pair<int, int>>
#define vvi vector<vector<int>>
#define pii pair<int, int>
#define pb push_back
#define ppb pop_back
#define repi(a,b,c) for(int i=a;i<=b;i+=c)
#define repk(a,b,c) for(int k=a;k<=b;k+=c)
#define repj(a,b,c) for(int j=a;j<=b;j+=c)
#define repm(a,b,c) for(int m=a;m<=b;m+=c)
#define rrepi(a,b,c) for(int i=a;i>=b;i-=c)
#define rrepj(a,b,c) for(int j=a;j>=b;j-=c)
#define rrepk(a,b,c) for(int k=a;k>=b;k-=c)
#define all(a) (a).begin(),(a).end()
#define rall(a) (a).rbegin(),(a).rend()
#define sp(x) fixed<<setprecision(x)
#define yes_out {cout<<"YES\n"; return;}
#define no_out {cout<<"NO\n"; return;}
#define vin(v) for(auto&x:v)cin>>x;
#define print(v) for(auto x:v) cout<<x<<" "; cout<<"\n";
const int N = 100005;
vpii g[N];
int n,m,k,d[N][2];
void solve(){
cin >> n >> m >> k;
repi(1,m,1){
int u,v,c;
cin >> u >> v >> c;
u++;v++;
g[u].pb({v,c});
g[v].pb({u,c});
}
fill(&d[0][0],&d[0][0]+(n+1)*2,INT_MAX);
priority_queue<pii,vpii,greater<pii>> pq;
repi(1,k,1){
int x;
cin >> x;
x++;
pq.push({0,x});
d[x][0]=0;
}
while(!pq.empty()){
int u=pq.top().second;
int dist=pq.top().first;
pq.pop();
if(d[u][1]<dist) continue;
for(auto neighbour:g[u]){
int v=neighbour.first;
int w=neighbour.second;
int newdist=dist+w;
if(d[v][0]>newdist){
d[v][1]=d[v][0];
d[v][0]=newdist;
pq.push({d[v][1],v});
}
else if(newdist>d[v][0]&&newdist<d[v][1]){
d[v][1]=newdist;
pq.push({newdist,v});
}
}
}
cout << d[1][1];
}
int32_t main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
std::ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int t = 1;
//cin >> t;
while (t--) solve();
return 0;
}