#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10,INF=0x3f3f3f3f;
int n,m,s,dis[N];
vector<pair<int,int> > g[N];
bool flag[N];
void dij(){
memset(dis,0x3f,sizeof(dis));
memset(flag,0,sizeof(flag));
dis[s]=0;
for(int i=0;i<n;i++){
int u=0;
for(int j=1;j<=n;j++){
if(flag[j]&&dis[u]>dis[j]) u=j;
}
if(!u) return;
flag[u]=1;
for(int j=0;j<g[u].size();j++){
int v=g[u][j].first,w=g[u][j].second;
if(flag[v]) continue;
dis[v]=min(dis[v],dis[u]+w);
}
}
}
int read();
signed main(){
n=read(); m=read(); s=read();
for(int i=0;i<m;i++){
int x=read(),y=read(),w=read();
g[x].push_back(make_pair(y,w));
g[y].push_back(make_pair(x,w));
}
dij();
for(int i=1;i<=n;i++){
if(dis[i]<INF) cout<<dis[i]<<" ";
else cout<<"-1 ";
}
return 0;
}
int read(){
int x=0,f=1;char ch=getchar();
while (!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
样例除了 s 点,其余全部输出了 −1(为了配合我们 OJ 上的题)!