record
提交记录都放这里了,为什么还要贴代码
#include <bits/stdc++.h>
#define MAXN 100005
#define _INT_MAX_ 1000000000
using namespace std;
struct nod {
int u, len;
nod(int u_, int len_) {
u = u_;
len = len_;
}
};
bool operator<(nod x, nod y) {
if (x.len != y.len) return x.len < y.len;
return x.u < y.u;
}
int dis[MAXN]; // dijkstra
bool vis[MAXN];
vector<int> G[MAXN], val[MAXN];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m, s;
cin >> n >> m >> s;
for (int i = 1; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w;
G[u].push_back(v);
val[u].push_back(w);
}
for (int i = 1; i <= n; i++) {
dis[i] = _INT_MAX_;
}
priority_queue<nod> q; // 堆优化
q.push(nod(s, 0));
dis[s] = 0;
while(!q.empty()){
auto [x, len] = q.top(); q.pop();
vis[x] = true;
for (int i = 0; i < G[x].size(); i++) {
int v = G[x][i];
if (!vis[v]) {
dis[v] = min(dis[v], dis[x] + val[x][i]);
q.push(nod(v, dis[v]));
}
}
}
for (int i = 1; i <= n; i++) {
cout << dis[i] << ' ';
}
cout << endl;
return 0;
}