全部TLE了,求救
#include<bits/stdc++.h>
using namespace std;
int read(){
int x=0,f=1;
char s=getchar();
while(s<'0'||s>'9'){
if(s=='-'){
f=-1;
}
s=getchar();
}
while(s>='0'&&s<='9'){
x=x*10+s-'0';
s=getchar();
}
return x*f;
}
struct edge{
int to,nxt,val;
}edge[500010];
const int INF=2147483647;
int cnt,n,m,s,dis[10010],vis[10010],head[10010];
int add(int u,int v,int w){
edge[++cnt].to=v;
edge[cnt].val=w;
edge[cnt].nxt=head[u];
head[u]=cnt;
}
int main(){
n=read(),m=read(),s=read();
for(int i=1;i<=n;i++){
dis[i]=INF;
head[i]=-1;
vis[i]=0;
}
dis[s]=0;
for(int i=1;i<=m;i++){
int u,v,w;
u=read(),v=read(),w=read();
add(u,v,w);
}
for(int i=1;i<n;i++){
int k=s,mn=INF;
for(int j=1;j<=n;j++){
if(vis[j]==0&&dis[j]<mn){
mn=dis[j],k=j;
}
}
vis[k]=1;
for(int j=head[k];j!=-1;j=edge[j].nxt){
int v=edge[j].to;
dis[v]=min(dis[v],dis[k]+edge[j].val);
}
}
for(int i=1;i<=n;i++){
printf("%d ",dis[i]);
}
return 0;
}