样例对了,数据测了也对了。
#include <bits/stdc++.h>
using namespace std;
struct node{
long long v,w;
};
long long n,m,t,x,y,z,vis[10010];
vector <node> a[10010];
queue <long long> q;
int spfa(int e){
memset(vis,0x3f,sizeof(vis));
q.push(x);
vis[x]=0;
while (!q.empty()){
long long u=q.front();
for (int i=0;i<int(a[u].size());i++){
int v=a[u][i].v,w=a[u][i].w;
if (vis[v]==0x3f3f3f3f || vis[v]>vis[u]+w){
vis[v]=vis[u]+w;
q.push(v);
}
}
q.pop();
}
return vis[e];
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>x;
for (int i=1;i<=m;i++){
cin>>x>>y>>z;
a[x].push_back({y,z});
a[y].push_back({x,z});
}
for (int i=1;i<=n;i++){
long long ans=spfa(i);
if (ans==0x3f3f3f3f) cout<<-1<<" ";
else cout<<ans<<" ";
}
return 0;
}