#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
struct node{
int v,w;
node(int vv,int ww){
v=vv,w=ww;
}
};
struct pink{
int v,w;
pink(int vv,int ww){
v=vv,w=ww;
}
bool operator < (const pink &x)const
{
return w>x.w;
}
};
priority_queue<pink> pq;
vector<node> g[100010];
int d[100010],n,m,s;
int vis[100010];
int read()
{
int ans=0,flag=1;
char ch=getchar();
while( (ch>'9' || ch<'0') && ch!='-' ) ch=getchar();
if(ch=='-') flag=-1,ch=getchar();
while(ch>='0' && ch<='9') ans=ans*10+ch-'0',ch=getchar();
return ans*flag;
}
int main()
{
cin>>n>>m>>s;
for (int i=1;i<=n;i++){
d[i]=2147483647;
}
for (int i=1;i<=m;i++){
int x,y,dis;
cin>>x>>y>>dis;
g[x].push_back(node(y,dis));
//g[y].push_back(x,dis);
}
d[s]=0;
for (int i=1;i<=n;i++){
int v=0,mind=inf;
v=pq.top().v;
mind=pq.top().w;
if (mind==inf)
break;
pq.pop();
for (int j=0;j<g[v].size();j++){
if (d[g[v][j].v]>(g[v][j].w+d[v])){
d[g[v][j].v]=g[v][j].w+d[v],d[g[v][j].v];
pq.push(pink(g[v][j].v,d[g[v][j].v]));
}
}
}
for (int i=1;i<=n;i++){
cout<<d[i]<<' ';
}
}
正常dij没问题,用优先队列优化就出锅了(