代码如下,实在是找不到问题了
#include<bits/stdc++.h>
using namespace std;
int n,m,s,h[501000],zw[501000];
long long w[501000];
bool p[1010001];
struct P{long long a,b;};
vector<P>t[501000];
int main()
{
memset(w,100,sizeof(w));
long long u=w[0];
scanf("%d%d%d",&n,&m,&s);
w[s]=0;p[s]=1;
for(int i=1;i<=m;i++)
{
int x,y;
long long z;
scanf("%d%d%lld",&x,&y,&z);
t[x].push_back({y,z});
h[x]++;
}
int l=0;
for(int j=1;j<=n;j++)
{
for(int i=0;i<h[s];i++)
{
w[t[s][i].a]=min(w[t[s][i].a],w[s]+t[s][i].b);
if(!p[t[s][i].a])
{
l++;
p[t[s][i].a]=1;
zw[l]=t[s][i].a;
}
}
s=zw[j];
}
int ww=pow(2,31)-1;
for(int o=1;o<=n;o++){if(w[o]==u)printf("%d ",ww);else printf("%lld ",w[o]);}
return 0;
}