提交时间:2025-04-06 15:36:30

运行 ID: 37553

#include<bits/stdc++.h> #define int long long #define PII pair<int,int> #define fir first #define sec second using namespace std; const int N=1e5+7; int n,m,k; struct Edge{ int v,w; Edge(int _v=0,int _w=0){v=_v,w=_w;}; }; vector<Edge> E[N]; int g[N],f[N],dis[N]; vector<int> S; inline void Dij(vector<int> V){ priority_queue<PII,vector<PII>,greater<PII> > q; for(int i=1;i<=n;i++)dis[i]=1e18; for(auto x:V)dis[x]=0,q.push(PII(0,x)); while(!q.empty()){ PII st=q.top();q.pop(); int u=st.sec; if(st.fir>dis[u])continue; for(auto e:E[u])if(dis[e.v]>dis[u]+e.w){ dis[e.v]=dis[u]+e.w; q.push(PII(dis[e.v],e.v)); } }for(int i=1;i<=n;i++)if(dis[i]!=0)f[i]=min(f[i],dis[i]); } signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #ifndef ONLINE_JUDGE freopen("query.in","r",stdin); freopen("query.out","w",stdout); #endif cin>>n>>m>>k; for(int i=1;i<=k;i++){int x;cin>>x;S.push_back(x);} for(int i=1;i<=m;i++){ int u,v,w; cin>>u>>v>>w; E[v].push_back(Edge(u,w)); }for(int i=1;i<=n;i++)cin>>g[i],f[i]=1e18; for(int i=0;i<=16;i++){ // cout<<i<<endl; vector<int> V;V.clear(); for(auto x:S)if(!((x>>i)&1))V.push_back(x);Dij(V); V.clear(); for(auto x:S)if((x>>i)&1)V.push_back(x);Dij(V); }for(int i=1;i<=n;i++)cout<<f[i]*g[i]<<" ";cout<<endl; return 0; }