提交时间:2025-11-26 18:16:57

运行 ID: 38977

#include<bits/stdc++.h> #define int long long using namespace std; const int N=2e5+10; int n,m,T,vip[N],dis[N],frm[N],ans=1e18; struct Node { int to,w; }; struct node { int to,w,frm; }; bool operator<(const node x,const node y) { return x.w>y.w; } vector<Node>e[N]; signed main() { //freopen("map.in","r",stdin); //freopen("map.out","w",stdout); //cin>>n>>m>>T; scanf("%lld%lld%lld",&n,&m,&T); for(int i=1;i<=m;i++) { int x,y,z; //cin>>x>>y>>z; scanf("%lld%lld%lld",&x,&y,&z); e[x].push_back((Node){y,z}); e[y].push_back((Node){x,z}); } priority_queue<node>q; memset(dis,0x3f,sizeof(dis)); for(int i=1;i<=T;i++) { int vip; //cin>>vip[i]; scanf("%lld",&vip); dis[vip]=0; frm[vip]=vip; q.push((node){vip,dis[i],vip}); } while(!q.empty()) { node now=q.top(); q.pop(); for(int i=0;i<e[now.to].size();i++) { Node to=e[now.to][i]; if(frm[to.to]!=0&&frm[to.to]!=now.frm) { ans=min(dis[to.to]+dis[now.to]+to.w,ans); //cout<<now.to<<" "<<to.to<<" "<<dis[to.to]+dis[now.to]+to.w<<"\n"; } if(dis[to.to]>dis[now.to]+to.w) { frm[to.to]=now.frm; dis[to.to]=dis[now.to]+to.w; q.push((node){to.to,dis[to.to],now.frm}); } } } //cout<<ans<<"\n"; printf("%lld\n",ans); //cout<<(double)clock()/CLOCKS_PER_SEC; return 0; }