#include <bits/stdc++.h>
using namespace std;
const int maxn = 500010;
const int maxm = 500010;
int val[maxm], to[maxm], next[maxn], head[maxn], ecnt = 0;
int n, m, dis[maxn], st;
struct node {
int num, d;
node(int nm, int dd) {
num = nm;
d = dd;
}
bool operator < (const node &a) const {
return d > a.d;
}
};
priority_queue <node> pq;
void add(int u, int v, int w) {
ecnt++;
val[ecnt] = w;
to[ecnt] = v;
next[ecnt] = head[u];
head[u] = ecnt;
}
int main() {
scanf("%d%d%d", &n, &m, &st);
for (int i = 1; i <= n; i++)
dis[i] = 2147483647;
for (int i = 0; i < m; i++) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
add(u, v, w);
}
dis[st] = 0;
pq.push(node(st, 0));
while (!pq.empty()) {
node hd = pq.top();
pq.pop();
int u = hd.num;
if (hd.d != dis[u])
continue;
for (int i = head[u]; i; i = next[i]) {
int v = to[i];
if (dis[u] + val[i] < dis[v]) {
dis[v] = dis[u] + val[i];
pq.push(node(v, dis[v]));
}
}
}
for (int i = 1; i <= n; i++)
printf("%d ", dis[i]);
}
把maxn改为500010就能过,100010过不了?