记录。。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e5 + 9;
struct edge {
int to, cost, next;
}e[maxn];
int top, head[maxn], vis[maxn], dis[maxn];
void init() {
top = 0;
memset(head, -1, sizeof(head));
}
void insert_(int u, int v, int c) {
e[top].to = v;
e[top].cost = c;
e[top].next = head[u];
head[u] = top++;
}
struct node {
int num, dist;
bool operator < (const node & x) const {
return dist > x.dist;
}
};
priority_queue<node> q;
int main() {
init();
int n, m, s, u, v, w;
cin >> n >> m >> s;
for(int i = 1; i <= m; i++) {
scanf("%d%d%d", &u, &v, &w);
insert_(u, v, w);
insert_(v, u, w);
}
for(int i = 1; i <= n; i++)
dis[i] = 2147483647;
dis[s] = 0;
q.push(node{s,0});
while(!q.empty()) {
node x = q. top();
q.pop();
int y = x.num;
if(vis[y]) continue;
vis[y] = 1;
for(int i = head[y]; i != -1; i = e[i].next) {
if(dis[e[i].to] > dis[y] +e[i].cost) {
dis[e[i].to] = dis[y] + e[i].cost;
q.push(node{e[i].to, dis[e[i].to]});
}
}
}
for(int i = 1; i <= n; i++) {
cout << dis[i] << " ";
}//输出s点到所有点的最短路
return 0;
}