欢迎大佬解答
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int head[N],to[4*N],nxt[4*N],v[4*N],cnt,dis[N],n,m,k;
bool b[N];
void add(int x,int y,int w){
to[++cnt]=y;
v[cnt]=w;
nxt[cnt]=head[x];
head[x]=cnt;
}
priority_queue<pair<int,int> > q;
void dijkstra(int s){
dis[s]=0;
q.push(make_pair(0,s));
while(!q.empty()){
int x=q.top().second;
q.pop();
if(b[x]) continue;
b[x]=1;
for(int i=head[x];i;i=nxt[i]){
int y=to[i],l=v[i];
if(dis[y]>dis[x]+l){
dis[y]=dis[x]+l;
q.push(make_pair(-dis[y],y));
}
}
}
}
int main(){
scanf("%d%d%d",&n,&m,&k);
memset(dis,0x3f,sizeof(dis));
memset(b,0,sizeof(b));
memset(head,-1,sizeof(head));
for(int i=1;i<=m;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
dijkstra(k);
for(int i=1;i<=n;i++) printf("%d ",dis[i]);
return 0;
}