最短路模板

#include<bits/stdc++.h>
using namespace std;
const int N=2e6;
int node[N],nxt[N],head[N],data[N];
int n,m,d[N],tot,begins;
int abs(int x)
{
    if(x<0) return -x;
    else return x;
}
void add(int x,int y,int z){
    node[++tot]=y;nxt[tot]=head[x];head[x]=tot;data[tot]=z;
}
struct ss
{
    int x,y;
}s[10022];
void Dij(){
    memset(d,10,sizeof d);d[begins]=0;
    priority_queue<pair<int,int> > heap;
    heap.push(make_pair(-d[begins],begins));
    while (1){
        for (;!heap.empty() && -d[heap.top().second]!=heap.top().first;heap.pop());
        if (heap.empty()) break;

        int now=heap.top().second;
        heap.pop();

        for (int i=head[now];i;i=nxt[i]){
            int j=node[i];
            if (d[j]>d[now]+data[i]){
                d[j]=d[now]+data[i];
                heap.push(make_pair(-d[j],j));
            }
        }
    }
}

  

原文地址:https://www.cnblogs.com/Heilce/p/7201054.html