传送门:https://www.luogu.org/problemnew/show/P3371
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
long long f[20005];
int head[20005];
int next[1000005];
int to[1000005];
int val[1000005];
bool visit[20005]={0};
int tt;
int main()
{
int n,m,s;
cin>>n>>m>>s;
int x,y,z;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
tt++;
to[tt]=y;
val[tt]=z;
next[tt]=head[x];
head[x]=tt;
}
for(int i=1;i<=n;i++)
{
f[i]=2147483647;
}
f[s]=0;
int aim=s;
long long minn=2147483647;
while(!visit[aim])
{
visit[aim]=true;
for(int i=head[aim];i!=0;i=next[i])
{
if(!visit[to[i]]&&f[to[i]]>val[i]+f[aim])
f[to[i]]=val[i]+f[aim];
}
minn=2147483647;
for(int i=1;i<=n;i++)
{
if(!visit[i]&&minn>f[i])
{
minn=f[i];
aim=i;
}
}
}
for(int i=1;i<=n;i++)
{
printf("%lld ",f[i]);
}
return 0;
}
爽