代码如下
实在改不出来
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e4+10;
const int MAXM=5e5+10;
const long long inf=pow(2,31)-1;
int cnt,head[MAXN],dis[MAXN],vis[MAXN],to[MAXM],nxt[MAXM],len[MAXM];
inline int init(){
cnt=1;
}
inline void add(int x,int y,int z){
to[++cnt]=y,len[cnt]=z;
nxt[cnt]=head[x];
head[x]=cnt;
}
inline void spfa(int n,int s){
queue<int> q;
for(int i=1;i<=n;++i) dis[i]=inf,vis[i]=0;
q.push(s); vis[s]=1,dis[s]=0;
while(!q.empty()){
int x=q.front(); q.pop();
vis[x]=0;
for(int i=head[x];i;i=nxt[i]){
int y=to[i];
if(dis[y]<=dis[x]+len[i]) continue;
dis[y]=dis[x]+len[i];
if(!vis[y]) q.push(y),vis[y]=1;
}
}
}
int main() {
init();
int n,m,S;
cin>>n>>m>>S;
for(int i=1; i<=m; i++) {
int f,g,w;
cin>>f>>g>>w;
add(f,g,w);
}
spfa(n,S);
for(int i=1; i<=n; i++)
if(S==i) cout<<0<<" ";
else cout<<dis[i]<<" ";
return 0;
}