提交时间:2025-04-06 14:08:56
运行 ID: 37540
#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define fr first #define sc second const int N=510,M=3e5+10; int n,m,k,s[M],g[M]; int dis[N][N],E[N][N]; bool vis[N]; struct Edge{int v,w,nx;}e[M];int h[M],CNT; void add(int u,int v,int w){e[++CNT]={v,w,h[u]};h[u]=CNT;} int read(){ char c=getchar();int d=0; while(c>'9'||c<'0'){c=getchar();} while(c>='0'&&c<='9'){d=d*10+c-'0';c=getchar();} return d; } priority_queue<pii>q; void dij(int x){ // cout<<"!!!!!!!!!!"<<x<<endl; dis[x][x]=0;q.push({0,x}); for(int i=1;i<=n;i++)vis[i]=0; while(!q.empty()){ int u=q.top().sc;q.pop(); if(vis[u])continue;vis[u]=1; // cout<<"??"<<u<<endl; int v,w; for(int i=h[u];i>0;i=e[i].nx){ v=e[i].v;w=e[i].w; // cout<<v<<" "<<dis[x][u]<<" "<<w<<" "<<dis[x][v]<<endl; if(dis[x][u]+w<dis[x][v]){ dis[x][v]=dis[x][u]+w; q.push({-dis[x][v],v}); } } } } void cal(){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++)E[i][j]=1e18; } for(int i=1;i<=m;i++){ int u=read(),v=read(),w=read(); E[u][v]=min(E[u][v],w); } for(int i=1;i<=n;i++){g[i]=read();} for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(E[i][j]!=1e18){add(i,j,E[i][j]);/*cout<<i<<" "<<j<<" "<<E[i][j]<<endl;*/} dis[i][j]=1e18; } } for(int i=1;i<=n;i++){ if(g[i]==0){printf("0 ");continue;} dij(i); int ans=1e18; for(int j=1;j<=k;j++){ if(s[j]==i)continue; ans=min(ans,dis[i][s[j]]); } printf("%lld ",ans*g[i]); } // for(int i=1;i<=n;i++){ // cout<<i<<"!!!"<<" "; // for(int j=1;j<=n;j++)printf("%lld ",dis[i][j]); // printf("\n"); // } } signed main(){ n=read();m=read();k=read(); for(int i=1;i<=k;i++){s[i]=read();} if(n<=500){cal();return 0;} for(int i=1;i<=m;i++){ int u=read(),v=read(),w=read(); add(u,v,w);add(v,u,w); } bool flag=0; for(int i=1;i<=n;i++){g[i]=read();if(g[i])flag=1;} if(!flag){ for(int i=1;i<=n;i++)printf("0 ");return 0; } fclose(stdin);fclose(stdout); return 0; }