#include<bits/stdc++.h>
using namespace std;
#define maxn 100010
typedef long long ll;
ll dis[maxn];
int m, n, s;
int vis[maxn];
vector<int> p[maxn], e[maxn];
struct node{
int x, dis;
bool operator < (const node &aa)const{
return aa.dis < dis;
}
};
void add_edge(int a, int b, int w){
p[a].push_back(b);
e[a].push_back(w);
}
priority_queue<node> q;
void dijkstra(int x){
memset(dis, 0x7f, sizeof dis);
memset(vis, 0, sizeof vis);
dis[x]=0;
q.push((node){x, 0});
while(!q.empty()){
int fro=q.top().x;
q.pop();
if(vis[fro])continue;
vis[fro]=1;
for(register unsigned int i=0; i<p[fro].size(); ++i){
if(vis[p[fro][i]])continue;
if(dis[p[fro][i]]>dis[fro]+e[fro][i]){
dis[p[fro][i]]=dis[fro]+e[fro][i];
q.push((node{p[fro][i], dis[p[fro][i]]}));
}
}
}
}
int main(){
ios::sync_with_stdio(0);
cin >> n >> m >> s;
for(register int i=1;i<=m;++i){
int u, v;
ll w;
cin >> u >> v;
cin >> w;
add_edge(w, v, w);
}
dijkstra(s);
for(register int i=1;i<=n;++i){
cout << dis[i] << " ";
}
}
有re有wa,求助问题在哪