不知道为什么...还特地去看了讲解...
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 500005;
struct Node{
int v;
int w;
};
int n,m,s,d[MAXN],vis[MAXN];
vector<Node> e[MAXN];
void dfs(){
fill(d,d+n+1,2147483647);
d[s] = 0;
for(int i = 1;i < n;i++){
int u = 0;
for(int j = 1;j <= n;j++)
if(!vis[j] && d[u] < d[j])u = j;
vis[u] = 1;
for(auto ed : e[u]){
int v = ed.v,w = ed.w;
if(d[v] > d[u]+w){
d[v] = d[u]+w;
}
}
}
}
int main(){
cin>>n>>m>>s;
for(int i = 0;i < m;i++){
int a,b,c;
cin>>a>>b>>c;
e[a].push_back({b,c});
}
dfs();
for(int i = 0;i < n;i++)cout<<d[i]<<" ";
return 0;
}