#include<bits/stdc++.h> #define maxn 10005 using namespace std; int n,m,s; vector<int> v[maxn],w[maxn]; int dis[maxn]; bool vis[maxn]; void SPFA() { memset(dis,0x3f3f3f3f,sizeof(dis)); queue<int> q; dis[s]=0; vis[s]=1; q.push(s); while(!q.empty()) { int x=q.front(); q.pop(); vis[x]=false;//vis标记是否在队列里 for(int i=0;i<v[x].size();i++) { int y=v[x][i]; if(dis[x]+w[x][i]<dis[y]) { dis[y]=dis[x]+w[x][i]; if(!vis[y]) { vis[y]=true; q.push(y); } } } } } int main() { scanf("%d%d%d",&n,&m,&s); for(int i=1;i<=m;i++) { int x,y,val; scanf("%d%d%d",&x,&y,&val); v[x].push_back(y); w[x].push_back(val); } SPFA(); for(int i=1;i<=n;i++) printf("%d ",(dis[i]!=0x3f3f3f3f)?dis[i]:((1<<31)-1)); return 0; }