zoukankan      html  css  js  c++  java
  • dijkstra模版

    #include<bits/stdc++.h>
    #define REP(i,a,b) for(int i=a;i<=b;i++)
    #define MS0(a) memset(a,0,sizeof(a))
    
    using namespace std;
    
    typedef long long ll;
    const int maxn=1000100;
    const int INF=1e9+10;
    
    struct Edge
    {
        int u,v,w;
    };
    
    struct Dijkstra
    {
        int n,m;
        vector<Edge> edges;
        vector<int> G[maxn];
        bool done[maxn];
        int d[maxn];
        int p[maxn];
        void init(int n)
        {
            this->n=n;
            REP(i,1,n) G[i].clear();
            edges.clear();
        }
        void addedge(int u,int v,int w)
        {
            edges.push_back({u,v,w});
            m=edges.size();
            G[u].push_back(m-1);
        }
        struct HeapNode
        {
            int d,u;
            friend bool operator<(HeapNode A,HeapNode B)
            {
                return A.d>B.d;
            }
        };
        void dijkstra(int s)
        {
            priority_queue<HeapNode> q;
            REP(i,1,n) d[i]=INF;
            d[s]=0;
            MS0(done);
            q.push({0,s});
            while(!q.empty()){
                HeapNode x=q.top();q.pop();
                int u=x.u;
                if(done[u]) continue;
                done[u]=1;
                for(int i=0;i<G[u].size();i++){
                    Edge &e=edges[G[u][i]];
                    if(d[e.v]>d[u]+e.w){
                        d[e.v]=d[u]+e.w;
                        p[e.v]=G[u][i];
                        q.push({d[e.v],e.v});
                    }
                }
            }
        }
    };Dijkstra dijk;
    View Code
    没有AC不了的题,只有不努力的ACMER!
  • 相关阅读:
    572.Subtree of Another Tree
    35.Search Insert Position(二分查找)
    198.House Robber(dp)
    724.Find Pivot Index
    705.Design HashSet
    求连通分量(深搜)
    删边(normal)
    叠放箱子问题
    数字游戏
    火车票
  • 原文地址:https://www.cnblogs.com/--560/p/5186107.html
Copyright © 2011-2022 走看看