这是一个标题
今天重写了一边我的迪杰特斯拉板子,似乎在自己的码风上看到了岁月的流逝?
如今的码风:
#include <bits/stdc++.h>
using i64 = long long;
#define TP std::tuple<int, int>
const int N = 1e5 + 10;
int dis[N], vis[N];
std::vector<TP> e[N];
std::priority_queue<TP, std::vector<TP>, std::greater<TP> > q;
void dij (int s) {
memset(dis, 0x3f, sizeof dis);
dis[s] = 0;
q.push({0, s});
while (!q.empty()) {
auto [w, u] = q.top(); q.pop();
if(vis[u]) continue;
vis[u] = true;
for (auto [v, w] : e[u]) {
if (!vis[v] && dis[u] + w < dis[v]) {
dis[v] = dis[u] + w;
q.push({dis[v], v});
}
}
}
}
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n, m, s;
std::cin >> n >> m >> s;
for (int i = 1; i <= m; i ++) {
int u, v, w;
std::cin >> u >> v >> w;
e[u].push_back({v, w});
}
dij(s);
for (int i = 1; i <= n; i ++) {
std::cout << dis[i] << ' ';
}
return 0;
}
半年前的码风:
#include<bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 2e5 + 10;
int n, m, s, ans[maxn], head[maxn], vis[maxn], cnt;
struct Edge{
int v, w, nex;
}edge[maxn];
struct Node{
int u, dis;
friend bool operator < (Node x, Node y){
return x.dis > y.dis;
}
};
priority_queue<Node> q;
void add(int u, int v, int w){
Edge &t = edge[++ cnt];
t.nex = head[u], t.v = v, t.w = w, head[u] = cnt;
}
void dij(){
q.push((Node){s, 0});
while(!q.empty()){
Node cur = q.top(); q.pop();
if(vis[cur.u]) continue;
vis[cur.u] = 1;
for(int i = head[cur.u]; i; i = edge[i].nex){
int v = edge[i].v, w = edge[i].w;
if(vis[v] == 0 && ans[cur.u] + w < ans[v]){
ans[v] = ans[cur.u] + w;
q.push((Node){v, ans[v]});
}
}
}
}
int main(void){
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m >> s;
for(int i = 1; i <= n; i++)
ans[i] = inf;
ans[s] = 0;
for(int i = 1; i <= m; i++){
int u, v, w;
cin >> u >> v >> w;
add(u, v, w);
}
dij();
for(int i = 1; i <= n; i++)
cout << ans[i] << " ";
return 0;
}

浙公网安备 33010602011771号