#include<bits/stdc++.h>
#include<cstdio>
using namespace std;
int n, m, s, final[100]={0}, D[100];
struct point{
int w, v;
bool operator < (const point& o) const{
return w < o.w && !final[v];
}
};
set<point> li[100];
void dfs(int vi){
set <point>::iterator it;
if (final[(*(li[vi].begin())).v]) return;
for (it = li[vi].begin();it != li[vi].end()||!final[(*it).v];++it){
int ui = (*it).v;
D[ui] = max(D[ui], D[vi]+(*it).w);
}
final[(*(li[vi].begin())).v] = 1;
return;
}
int main(){
cin>>n>>m>>s;
for (int i=1;i<=n;++i){
D[i] = INT_MAX;
}
for (int i=0;i<m;++i){
int ui, vi, wi;
cin>>ui>>vi>>wi;
point a={wi, vi}, b={wi, ui};
li[ui].insert(a);
li[vi].insert(b);
}
D[s] = 0;
dfs(s);
for (int i=1;i<=n;++i){
cout<<D[i]<<" ";
}
return 0;
}
有大佬能救一下吗,一个萌新。。。