#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
#include<cmath>
#include<cstring>
#include<algorithm>
const int maxn=10000+10,inf=1000000000;
using namespace std;
struct node{int to,z;};
int p[maxn],d[maxn];
vector<node>e[maxn];
int q[maxn*100];
int main(){
int i,j,k,m,n,s;
cin>>n>>m>>s;
for(i=1;i<=m;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
node t;
t.to=y;t.z=z;
e[x].push_back(t);
}
for(i=1;i<=n;i++)d[i]=inf;
d[s]=0;
q[1]=s;p[s]=1;
int f=0,l=1;
while(f<l){
f++;
int x=q[f];
for(i=0;i<e[x].size();i++){
int u=e[x][i].to,v=e[x][i].z;
if(d[u]>d[x]+v){
d[u]=d[x]+v;
if(!p[u]){
q[++l]=u;
p[u]=1;
}
}
}
p[x]=0;
}
for(i=1;i<=n;i++)
if(d[i]<inf)printf("%d ",d[i]);
else printf("2147483647 ");
return 0;
}
spfa+vector
最新推荐文章于 2024-08-10 15:37:32 发布