Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
37559 | A21μΘ_wjy | 【S】T2 | C++ | 运行超时 | 30 | 1000 MS | 61684 KB | 1537 | 2025-04-06 15:42:32 |
#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]); } 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<<(g[i]?f[i]:0)<<" ";cout<<endl;cout.flush(); return 0; }