简单diji 但会CE
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define mp make_pair
#define pb push_back
int n,m,s;
vector<pair<int,int> >g[100005];
struct node{
int num,val;
bool operator<(const node gg){
return gg.val<val;
}
};
int d[100005],vis[100005];
priority_queue<node>q;
void diji(){
memset(d,0x7f7f,sizeof(d));
d[s]=0;vis[s]=1;q.push(node{s,0});
while(q.size()!=0){
node x=q.top();q.pop();
if(vis[x.num]==1){
continue;
}
vis[x.num]=1;
for(int i=0;i<g[x.num].size();i++){
int y=g[x.num][i].first,value=g[x.num][i].second;
if(d[y]>d[x.num]+value){
d[y]=d[x.num]+value;
if(vis[y]==0){
vis[y]=1;
q.push(node{y,d[y]});
}
}
}
}
}
signed main(){
cin>>n>>m>>s;
for(int i=1;i<=m;i++){
int uu,vv,ww;cin>>uu>>vv>>ww;
g[uu].pb(mp(vv,ww));
}
diji();
for(int i=1;i<=n;i++){
cout<<d[i]<<" ";
}
}