提交时间:2025-11-26 19:49:32
运行 ID: 38982
#include<bits/stdc++.h> using namespace std; #define int long long #define N 200005 #define T 100005 struct edge { int to,w; }; bool operator<(edge x,edge y){ return x.w>y.w; } int n,m,t; vector<edge>e[N]; int a[N]; int dis[N],from[N]; bool vis[N]; priority_queue<edge>q; void dijkstra(){ memset(dis,0x3f,sizeof(dis)); for(int i=1;i<=t;i++){ dis[a[i]]=0; from[a[i]]=a[i]; q.push({a[i],0}); } while(!q.empty()){ int u=q.top().to; q.pop(); if(vis[u]) continue; vis[u]=1; for(edge i:e[u]){ int v=i.to,w=i.w; if(dis[v]>dis[u]+w){ dis[v]=dis[u]+w; q.push({v,dis[v]}); from[v]=from[u]; } } } } signed main(){ ios::sync_with_stdio(0); cin>>n>>m>>t; for(int u,v,w,i=1;i<=m;i++){ cin>>u>>v>>w; e[u].push_back({v,w}); e[v].push_back({u,w}); } for(int i=1;i<=t;i++) cin>>a[i]; dijkstra(); int ans=1e18; for(int u=1;u<=n;u++){ for(edge i:e[u]){ if(from[u]!=from[i.to]) ans=min(ans,dis[u]+dis[i.to]+i.w); } } cout<<ans<<endl; return 0; }