图论-Dijkstra最短路

验板子的题:单源最短路


匆忙整理的板子,依稀记得大二下那次 vp 写的巨抽象的最短路

#define PII pair<ll, int>
int head[N], cnt = 0;
struct Edge{
    int from, to, nxt;
    ll val;
}e[N << 1];
void add(int u, int v, ll w){
    e[++cnt].from = u;
    e[cnt].to = v;
    e[cnt].val = w;
    e[cnt].nxt = head[u];
    head[u] = cnt;
}

ll dis[N];
bool vis[N];

void dij(int s){
    for(int i = 1; i <= n; i++) dis[i] = inf, vis[i] = false;
    priority_queue<PII, vector<PII>, greater<PII> > heap;
    dis[s] = 0;
    heap.push({0LL, s});
    while(!heap.empty()){
        auto[x, u] = heap.top();
        heap.pop();
        if(vis[u]) continue;
        vis[u] = true;
        for(int i = head[u]; i != 0; i = e[i].nxt){
            int v = e[i].to;
            if(dis[v] > dis[u] + e[i].val){
                dis[v] = dis[u] + e[i].val;
                heap.push({dis[v], v});
            }
        }
    }
}

注意 PII 要改为 pair<ll, int>, 2024/7/13 上当

posted @ 2024-05-24 12:58  9102700  阅读(17)  评论(0)    收藏  举报