求捞,改不明白为什么 #4 会 WA
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n,m,k,P,Q,s,c[N],vis[N] = {0};
long long dis[N];
unordered_set<int> st,gr;
vector<int> G[2*N];
inline void bfs(){
queue<int>q;
for(int i = 1;i <= k;i ++){
q.push(c[i]);
dis[c[i]] = 0;
}
while(q.size()){
int x = q.front();
q.pop();
for(auto y : G[x]){
if(!st.count(y)){
st.insert(y);
dis[y] = dis[x] + 1;
if(dis[y] < s) q.push(y);
}
}
}
}
inline void dijstra(int str){
memset(dis , 0x3f , sizeof dis);
priority_queue<pair<long long,int>> q;
q.push(make_pair(0,str));
dis[str] = 0;
while(q.size()){
int x = q.top().second;
q.pop();
if(vis[x]) continue;
vis[x] = 1;
for(auto y : G[x]){
if(gr.count(y)) continue;
int d = dis[x] + (st.count(y) ? Q : P);
if(dis[y] > d){
dis[y] = d;
q.push(make_pair(-d,y));
}
}
}
}
int main(){
cin >> n >> m >> k >> s >> P >> Q;
for(int i = 1;i <= k;i ++){
cin >> c[i];
gr.insert(c[i]);
}
for(int i = 1;i <= m;i ++){
int a,b;
cin >> a >> b;
G[a].push_back(b);
G[b].push_back(a);
}
bfs();
dijstra(1);
cout << dis[n] - (st.count(n) ? Q : P);
return 0;
}