#include<bits/stdc++.h>
using namespace std;
struct edge
{
long long v,w;
};
vector<edge> e[200010];
long long dis[200010],vis[200010];
set<pair<long long,long long>> b;
void dijkstra(long long s,long long n)
{
for(long long i=1;i<=n;++i)
{
dis[i]=1e18;
b.insert({i,dis[i]});
}
b.erase({s,dis[s]});
dis[s]=0;
b.insert({s,0});
while(b.size())
{
long long tmp=(*b.begin()).first;
b.erase(*b.begin());
for(auto i:e[tmp])
{
if(dis[tmp]+i.w<dis[i.v])
{
b.erase({i.v,dis[i.v]});
dis[i.v]=dis[tmp]+i.w;
b.insert({i.v,dis[i.v]});
}
}
}
}
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
long long n,m,s,q;
cin>>n>>m>>s>>q;
for(long long i=1;i<=m;++i)
{
long long u,v,t;
cin>>u>>v>>t;
e[u].push_back({v,t});
e[v].push_back({u,t});
}
dijkstra(s,n);
while(q--)
{
long long h;
cin>>h;
cout<<dis[h]<<endl;
}
return 0;
}
改好后关注