提交时间:2025-11-26 19:24:17

运行 ID: 38981

#include<bits/stdc++.h> #define int long long void read(int &x){x=0;char c=getchar();for(;!isdigit(c);c=getchar());for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);} #define read2(a,b) read(a),read(b) #define read3(a,b,c) read2(a,b),read(c) using namespace std; int n,m,t; vector<pair<int,int>>e[200005]; vector<int>p; int dis[200005],vis[200005]; void dij(int r){ memset(dis,0x3f,sizeof dis); memset(vis,0,sizeof vis); priority_queue<pair<int,int>>q; for(int x:p){ if(x&r){ dis[x]=0; q.push({0,x}); } } while(!q.empty()){ int p=q.top().second; q.pop(); if(vis[p])continue; vis[p]=1; for(auto[x,w]:e[p]){ if(dis[x]>dis[p]+w){ dis[x]=dis[p]+w; q.push({-dis[x],x}); } } } } void slv(){ read3(n,m,t); for(int i=1,u,v,w;i<=m;i++){ read3(u,v,w); e[u].push_back({v,w}); e[v].push_back({u,w}); } for(int i=1;i<=t;i++){ int x; read(x); p.push_back(x); } int ans=1e18; for(int i=1;i<=n;i<<=1){ dij(i); for(int x:p){ if(x&i)continue; ans=min(ans,dis[x]); } } cout<<ans<<endl; } signed main(){ // int T;cin>>T;while(T--) slv(); return 0; }