20分求调
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,s,maxn,j;
int a[1001][1001];
int u,v,w;
int dis[1001];
bool vis[1001];
signed main(){
cin>>n>>m>>s;
for(int i=1;i<=n;i++){
a[i][i]=0;
dis[i]=1e10;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i!=j) a[i][j]=1e10;
}
}
for(int i=1;i<=m;i++){
cin>>u>>v>>w;
a[u][v]=min(a[u][v],w);
//a[v][u]=w (无向图添加)
}
vis[s]=1;
dis[s]=0;
for(int i=1;i<=n;i++){
dis[i]=a[s][i];
}
for(int i=1;i<=n-1;i++){
maxn=1e18;
for(int k=1;k<=n;k++){
if(vis[k]==0){
if(dis[k]<maxn){
maxn=dis[k];
j=k;
}
}
}
for(int k=1;k<=n;k++){
if(a[s][j]+a[j][k]<dis[k]){
dis[k]=a[s][j]+a[j][k];
}
}
vis[j]=1;
}
for(int i=1;i<=n;i++){
if(dis[i]==1e10){
cout<<2147483647<<' ';
}
else cout<<dis[i]<<' ';
}
return 0;
}