Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
37563 | A21μΘ_wjy | 【S】T2 | C++ | 无测评数据 | 90 | 1017 MS | 61836 KB | 1697 | 2025-04-06 15:47:49 |
#include<bits/stdc++.h> #define ll long long #define PII pair<ll,int> #define fir first #define sec second #define endl '\n' 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]; ll 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]); } inline int read() { int x=0,f=1;char ch=getchar(); while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();} while (isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();} return x*f; } signed main(){ #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;x=read();S.push_back(x);} for(int i=1;i<=m;i++){ int u,v,w; u=read();v=read();w=read(); E[v].push_back(Edge(u,w)); }for(int i=1;i<=n;i++)g[i]=read(),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<<(g[i]?f[i]:0)<<" ";cout<<endl;cout.flush(); return 0; }