dijkstra+堆优化

#include<map>
#include<ctime>
#include<cmath>
#include<queue>
#include<cctype>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

#define ll long long
const int maxn=100005;
int n,m,cnt,head[maxn];
struct edge{
    int x,y,val,next;
}e[maxn<<1];

int max(int a,int b){return a>=b ? a : b ;}
int min(int a,int b){return a<=b ? a : b ;}

void add(int x,int y,int val){
    e[++cnt]=(edge){x,y,val,head[x]};
    head[x]=cnt;
}

bool vis[maxn];
int s,t,dis[maxn];
void dijkstra(){
    priority_queue<pair<int,int> > q;
    memset(dis,0x3f,sizeof(dis));
    memset(vis,false,sizeof(vis));
    dis[s]=0;
    q.push(make_pair(0,s));
    while(!q.empty()){
        int x=q.top().second;
        q.pop();
        if(vis[x]) continue;
        vis[x]=true;
        for(int i=head[x];i;i=e[i].next){
            int y=e[i].y,val=e[i].val;
            if(dis[y]>dis[x]+val){
                dis[y]=dis[x]+val;
                q.push(make_pair(-dis[y],y));
            }
        }
    }
}

int main(){

    return 0;
}
View Code
原文地址:https://www.cnblogs.com/sto324/p/15340076.html