Solution
cookiebus
2022-06-11 14:16:56
42
返回题目
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int INF = INT_MAX;
int n, m, s, mp[1005][1005], d[1005], u, v, w;
bool c[1005];
signed main() {
cin >> n >> m >> s;
memset(mp, 0x3f, sizeof(mp));
for (int i = 1; i <= m; ++i) {
scanf("%lld %lld %lld", &u, &v, &w);
mp[u][v] = min(mp[u][v], w);
}
for (int i = 1; i <= n; ++i) d[i] = INF;
for (int i = 1; i <= n; ++i) c[i] = false;
d[s] = 0;
for (int i = 1; i <= n; ++i) {
int v = -1;
for (int j = 1; j <= n; ++j) {
if (c[j] == false && (v == -1 || d[v] > d[j]))
v = j;
}
if (v == -1) break;
c[v] = true;
for (int j = 1; j <= n; ++j)
if (d[v] + mp[v][j] < d[j])
d[j] = d[v] + mp[v][j];
}
for (int i = 1; i <= n; ++i) printf("%lld ", d[i]);
return 0;
}
{{ vote && vote.total.up }}