我的这份代码不知道为什么每次无解的情况总是输出 4557430888798830399,求助大佬们qwq。
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k;
int dis[400031];
struct EdgeInfo{
int to,w;
};
struct NodeMessage{
int pos,tme;
friend bool operator < (NodeMessage a,NodeMessage b){
return a.tme>b.tme;
}
};
vector<EdgeInfo> G[800031];
void dijkstra(){
memset(dis,0x3f,sizeof(dis));
priority_queue<NodeMessage> pq;
pq.push({1,0});
while(!pq.empty()){
int npos=pq.top().pos,ntme=pq.top().tme; pq.pop();
if(ntme>dis[npos]) continue;
dis[npos]=ntme;
//if(vis[now.pos]) continue; vis[now.pos]=1;
for(EdgeInfo &i:G[npos])
if(dis[i.to]>ntme+i.w)
pq.push({i.to,ntme+i.w});
}
}
signed main(){
cin>>n>>m>>k;
for(int i=1,u,v,w;i<=m;i++){
cin>>u>>v>>w;
if(w==1) G[u].push_back({v,1}),G[v].push_back({u,1});
else G[u+n].push_back({v+n,1}),G[v+n].push_back({u+n,1});
}
for(int i=1,x;i<=k;i++){
cin>>x;
G[x].push_back({x+n,0}),G[x+n].push_back({x,0});
}
dijkstra();
int ans=min(dis[n],dis[n+n]);
if(ans==0x3f3f3f3f) cout<<-1;
else cout<<ans;
return 0;
}