提交时间:2025-04-06 15:48:05

运行 ID: 37565

#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back #define ppc __builtin_popcount using namespace std; typedef long long ll; typedef unsigned long long ull; typedef unsigned int uint; const int maxn=1e6+10,mod=998244353; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,m,k; vector<pi>G[maxn]; ll f[maxn],g[maxn],h[maxn],vs[maxn]; void dij(vector<int>ve){ up(i,1,n)h[i]=1e18,vs[i]=0; priority_queue<pair<ll,int>,vector<pair<ll,int> >,greater<pair<ll,int> > >q; for(int u:ve)h[u]=0,q.push(m_p(0,u)); while(!q.empty()){ int p=q.top().p2;q.pop(); if(vs[p])continue;vs[p]=1; for(auto x:G[p])if(h[x.p1]>h[p]+x.p2){ h[x.p1]=h[p]+x.p2; q.push(m_p(h[x.p1],x.p1)); } } up(i,1,n)if(h[i]!=0)f[i]=min(f[i],h[i]); } void slv(){ n=read(),m=read(),k=read(); vector<int>ve; up(i,1,k)ve.p_b(read()); up(i,1,n)f[i]=1e18; up(i,1,m){ int x=read(),y=read(),w=read(); G[y].p_b(m_p(x,w)); } up(i,0,16){ vector<int>v; for(int x:ve)if((x>>i)&1)v.p_b(x);dij(v);v.clear(); for(int x:ve)if(!((x>>i)&1))v.p_b(x);dij(v); } up(i,1,n)g[i]=read(); up(i,1,n)printf("%lld ",f[i]*g[i]); } int main(){ //freopen("query.in","r",stdin),freopen("query.out","w",stdout); slv(); //cerr<<clock()*1.0/CLOCKS_PER_SEC<<"s\n"; return 0; }