关于SPFA,他复活了
#include<bits/stdc++.h>
using namespace std;
int tot,n,s,w[100005],son[100005],next[100005];
int fir[100005],q[100005],vis[100005],d[100005];
void add(int x,int y,int z){
w[++tot]=z;
son[tot]=y;
next[tot]=fir[x];
fir[x]=tot;
}
void spfa(){
memset(vis,0,sizeof(vis));
for(int i=1;i<=10000;i++){
d[i]=2147483647;
}
int head=0,tail=1;
q[1]=s,d[s]=0;
while(head!=tail){
head=head%n+1;
int x=q[head];
vis[x]=0;
for(int i=fir[x];i;i=next[i]){
if(d[son[i]]>d[x]+w[i]){
d[son[i]]=d[x]+w[i];
if(!vis[son[i]]) tail=tail%n+1,q[tail]=son[i],vis[son[i]]=1;
}
}
}
}
int main(){
scanf("%d%d%d",&n,&m,&s);
int a,b,c;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
}
spfa();
for(int i=1;i<=n;i++){
if(i==s) cout<<0<<' ';
else{
cout<<d[i]<<' ';
}
}
return 0;
}