#include <iostream>
#include <cstring>
#include <queue>
#define pii pair<int, int>
using namespace std;
const int N = 1e4 + 10;
const int M = 2 * N;
const int A = 1 << 30, B = (1 << 30) - 1;
const int INF = A + B;
int n, m, s;
int idx;
int head[N], edge[M], ver[M], Next[M];
bool vis[N];
long long dist[M];
priority_queue<pii> q;
void add(long long x, long long y, long long z) {
ver[++idx] = y, edge[idx] = z;
Next[idx] = head[x], head[x] = idx;
}
void dijkstra(long long s) {
for (long long i = 1; i <= n; i++) dist[i] = INF, vis[i] = false;
dist[s] = 0; q.push(make_pair(0, s));
while (q.size()) {
int x = q.top().second; q.pop();
if (vis[x]) continue;
vis[x] = true;
for (int i = head[x]; i; i = Next[i]) {
int y = ver[i], z = edge[i];
if (dist[x] + z <= dist[y]) {
dist[y] = dist[x] + z;
q.push(make_pair(-dist[y], y));
}
}
}
}
int main() {
cin >> n >> m >> s;
for (int i = 1; i <= m; i++) {
int x, y, z;
cin >> x >> y >> z;
add(x, y, z);
}
dijkstra(s);
for (int i = 1; i <= n; i++) cout << dist[i] << " ";
cout << endl;
return 0;
}
数组大小应该不会炸,感觉是优先队列那里爆的空间/kk