#include <bits/stdc++.h>
using namespace std;
int head[100004];
struct node{
int to;
int w;
int nxt;
} edge[200005];
int n,m,s;
int d[100004];
bool visit[100004];
queue <int> que;
int main (){
memset(d,127,sizeof(d));
cin>>n>>m>>s;
d[s]=0;
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
edge[i].to=v;
edge[i].w=w;
edge[i].nxt=head[u];
head[u]=i;
}
for(int u=1;u<=n;u++){
que.push(u);
visit[u]=true;
}
while(!que.empty()){
int u=que.front();
que.pop();
visit[u]=false;
for(int i=head[u];i;i=edge[i].nxt){
int v=edge[i].to;
int w=edge[i].w;
if (d[u] + w < d[v]) {
d[v] = d[u] + w;
if (!visit[v]) {
que.push(v);
visit[v] = true;
}
}
}
}
for(int i=1;i<=n;i++){
cout<<d[i]<<" ";
}
return 0;
}
```cpp
谢谢大家