这是dij的一道板子题,我感觉我这没啥问题啊,但是有几个点WA掉了。求助啊啊啊
#include<bits/stdc++.h>
#define N 200010
#define INF 0x7fffffff
using namespace std;
struct node{
int k,s;
bool operator <(const node &x)const{
return x.s<s;
}
};
struct Edge{
int nxt,to;
};
vector<Edge> g[N];
priority_queue<node> q;
int dis[N];
int vis[N];
int n,m,p;
int main(){
cin>>n>>m>>p;
int u,v,w;
while(m--){
cin>>u>>v>>w;
Edge x;
x.to=w,x.nxt=v;
g[u].push_back(x);
x.to=w,x.nxt=u;
g[v].push_back(x);
}
for(int i=0;i<N;++i)
dis[i]=INF;
dis[p]=0;
q.push((node){p,0});
while(!q.empty()){
node x=q.top();
q.pop();
if(vis[x.k]) continue;
vis[x.k]=1;
int l=g[x.k].size();
for(int i=0;i<l;++i){
int y=g[x.k][i].nxt;
int z=g[x.k][i].to;
if(dis[y]>dis[x.k]+z){
if(!vis[y])
q.push((node){y,dis[x.k]+z});
dis[y]=dis[x.k]+z;
}
}
}
for(int i=1;i<=n;++i)
cout<<dis[i]<<" ";
cout<<endl;
return 0;
}