这是一个标题

今天重写了一边我的迪杰特斯拉板子,似乎在自己的码风上看到了岁月的流逝?
如今的码风:

#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;
}
posted @ 2023-01-05 15:44  ReSakura  阅读(46)  评论(0)    收藏  举报