#include <bits/stdc++.h>
using namespace std;
int n, m, s, cnt;
struct edge {
int to, cost, nex;
} e[200020];
struct node {
int cost, dian;
bool operator <( const node &x )const {
return x.cost < cost;
}
};
int dis[100020];
int head[100020];
bool vis[100020];
priority_queue<node>Q;
void add(int x, int y, int z) {
e[++cnt].to = y;
e[cnt].cost = z;
e[cnt].nex = head[x];
head[x] = cnt;
}
void dijkstra() {
memset(dis, 127, sizeof(dis));
dis[s] = 0;
Q.push(node{0, s});
while (!Q.empty()) {
node tmp = Q.top();
Q.pop();
int cost = tmp.cost, dian = tmp.dian;
if (vis[dian])
continue;
for (int i = head[dian]; i != 0; i = e[i].nex) {
int to = e[i].to;
if (dis[to] > dis[dian] + e[i].cost) {
dis[to] = dis[dian] + e[i].cost;
if (!vis[to]) {
Q.push(node{dis[to], to});
}
}
}
}
}
int main() {
cin >> n >> m >> s;
for (int i = 1; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w;
add(u, v, w);
}
dijkstra();
for (int i = 1; i <= n; i++) {
cout << dis[i] << " ";
}
}
TLE了