样例RE。。。
#include<iostream>
#include<vector>
#include<climits>
using namespace std;
const int INF = INT_MAX;
vector<int>dijkstra(vector<vector<int>>g, int s){
int n = g.size();
vector<int>vis(n+10,0);
vector<int>dist(n+10,0);
for(int i = 1; i <= n; i++){
dist[i] = g[s][i];
}
vis[s] = 1;
for(int i = 1; i <= n; i++){
int min_dist = INF;
int mid = 1;
for(int j = 1; j <= n; j++){
if(vis[j] == 0 && min_dist > dist[j]){
min_dist = dist[j];
mid = j;
}
}
for(int j = 1; j <= n; j++){
if(vis[j] == 0 && dist[j] > dist[mid] + g[mid][j]){
dist[j] = dist[mid] + g[mid][j];
}
}
vis[mid] = 1;
}
return dist;
}
int main(){
int n, m, s;
cin >> n >> m >> s;
vector<vector<int>>g(n+1, vector<int>(n+1, INF));
for(int i = 1; i <= n; i++){
g[i][i] = 0;
}
for(int i = 1; i <= m; i++){
int u, v, w;
cin >> u >> v >> w;
g[u][v] = w;
}
vector<int>dist = dijkstra(g, s);
for(int i = 1; i <= n; i++){
cout << dist[i] << ' ';
}
return 0;
}