#include<cstdio>
#include<vector>
#include<algorithm>
#define MAXN 10005
#define INF ((1<<31)-1)
using namespace std;
class edge {
public:
int to,w;
edge(int _to,int _w) {
to=_to;
w=_w;
}
};
vector<edge>map[MAXN];
int dis[MAXN];
bool vis[MAXN];
int main() {
int n,m,s;
scanf("%d %d %d",&n,&m,&s);
for(int i=1; i<=n; i++)dis[i]=INF;
for(int i=0; i<m; i++) {
int u,v,w;
scanf("%d %d %d",&u,&v,&w);
map[u].push_back(edge(v,w));
map[v].push_back(edge(u,w));
}
dis[s]=0;
vis[s]=true;
for(int i=0; i<map[s].size(); i++)dis[map[s][i].to]=map[s][i].w;
while(true) {
int mindis=INF,mink=-1;
for(int i=1; i<=n; i++)if(!vis[i]&&dis[i]<mindis) {
mindis=dis[i];
mink=i;
}
if(mink==-1)break;
vis[mink]=true;
for(int i=0; i<map[mink].size(); i++)dis[map[mink][i].to]=min(dis[map[mink][i].to],dis[mink]+map[mink][i].w);
}
for(int i=1; i<=n; i++)printf("%d ",dis[i]);
return 0;
}
写过一样的代码是100分 再写一遍不知道哪里的问题