我的代码
#include <bits/stdc++.h>
using namespace std;
const int N= 1e6+10;
#define inf 0x3f3f3f3f
#define ll long long
#define ull unsigned long long
#define PII pair<int,int>
inline int inc(int x,int v,int mod){x+=v;return x>=mod?x-mod:x;}
inline int dec(int x,int v,int mod){x-=v;return x<0?x+mod:x;}
inline int rd(){int x=0,f=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;}
inline void write(int x){if(x==0){putchar(48);return;}int len=0,dg[20];while(x>0){dg[++len]=x%10;x/=10;}for(register int i=len;i>=1;i--)putchar(dg[i]+48);}
int d[N];
struct node{
int to,val,nex;
}ed[N<<1];
int idx,head[N];
void add(int x,int y,int z)
{
ed[++idx].to=y;
ed[idx].nex=head[x];
ed[idx].val=z;
head[x]=idx;
}
int n,m,s;
void SPFA()
{
bool v[N];
memset(d,63,sizeof(d));
queue<int>q;
q.push(s);d[s]=0,v[s]=1;
while(!q.empty())
{
int x=q.front();q.pop();v[x]=0;
for(int i=head[x];i;i=ed[i].nex)
{
int y=ed[i].to;
if(d[y]>d[x]+ed[i].val)
{
d[y]=d[x]+ed[i].val;
if(!v[y])
{
v[y]=1;q.push(y);
}
}
}
}
}
int main()
{
//freopen("未命名1.in","r",stdin);
//freopen("未命名1.out","w",stdout);
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
}
SPFA();
for(int i=1;i<=n;i++)
{
if(d[i]==1061109567)d[i]=(1ll<<31)-1;
printf("%d ",d[i]);
}
return 0;
}
标准输入:
5 15 5
2 5 181
1 5 98
4 2 49
3 2 262
4 3 26
2 4 192
5 1 221
2 2 254
4 4 233
1 5 44
5 4 67
4 2 214
1 1 47
1 1 118
5 4 3
标准输出:
221 52 29 3 0
我的输出
221 52 29 3 0
/zk