RT,几个月前学了SPFA,当时能AC,现在却不行了,对不也没对比出来什么,求助!``` #include
#include
#include
#include
#define ll long long
using namespace std;
queue q;
ll n,m,s;
ll d[100005],u[500005],v[500005],w[500005],now[100005],before[500005];
bool flag[100005];
inline ll read(){ ll z=1,num=0;
char c=getchar();
while(c>'9'||c<'0'){
if(c=='-')
z=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
num=(num<<1)+(num<<3)+(c^48);
c=getchar();
}
return z*num;
}
inline void write(ll x){ char num[101];
int k=0;
if(x==0)
putchar('0');
if(x<0){
putchar('-');
x=-x;
}
while(x){
num[++k]=x%10+'0';
x/=10;
}
while(k)
putchar(num[k--]);
putchar(' ');
return;
}
ll inf=2147483647;
int main(){ n=read(),m=read(),s=read();
memset(before,-1,sizeof(before));
for(register int i=1;i<=n;i++){
now[i]=-1;
d[i]=inf;
}
for(register int i=1;i<=m;i++){
u[i]=read(),v[i]=read(),w[i]=read();
before[i]=now[u[i]];
now[u[i]]=i;
}
q.push(s);
d[s]=0;
while (!q.empty()){
int x=q.front();
q.pop();
if(flag[x])
continue;
flag[x]=true;
for(register int i=now[x];i!=-1;i=before[i])
if(d[v[i]]>d[x]+w[i]){
d[v[i]]=d[x]+w[i];
q.push(v[i]);
}
}
for(register int i=1;i<=n;i++)
write(d[i]);
system("pause");
return 0;
}