1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn = 1e5+5,inf = 1e9; 4 struct node{ 5 int to,w; 6 }; 7 vector<node>e[maxn]; 8 int d[maxn],p[maxn]; 9 int n,m,s; 10 inline void add(int x,int y,int z){ 11 node t; 12 t.to = y; 13 t.w = z; 14 e[x].push_back(t); 15 } 16 inline void dijistra(){ 17 for(int i = 1;i <= n;i++)d[i] = inf; 18 d[s] = 0; 19 for(int i = 1;i <= n;i++){ 20 int mins = inf,k; 21 for(int j = 1;j <= n;j++) 22 if(!p[j] && d[j] < mins){ 23 mins = d[j];k=j; 24 } 25 p[k]=1; 26 for(int j = 0;j < e[k].size();j++){ 27 node v = e[k][j]; 28 if(d[v.to] > d[k]+v.w)d[v.to] = d[k]+v.w; 29 } 30 } 31 } 32 int main(){ 33 cin>>n>>m>>s; 34 for(int i=1,x,y,z;i<=m;i++){ 35 scanf("%d%d%d",&x,&y,&z); 36 add(x,y,z); 37 } 38 dijistra(); 39 for(int i = 1;i <= n;i++) 40 if(d[i] < inf)printf("%d ",d[i]); 41 else printf("2147483647 "); 42 return 0; 43 }