【圖論模板】單源最短路(堆優化Dijkstra)

原諒我這個用stl的醜陋的版本
可以用。
建議在允許O2優化的比賽使用。

//dijkstra
//MuYun
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
priority_queue <pair<int,int> > q;
int vet[20000],val[20000],vis[20000],head[20000],next[20000];
int edgenum;
inline void add(int x,int y,int value){
    vet[++edgenum]=y;
    val[edgenum]=value;
    next[edgenum]=head[x];
    head[x]=edgenum;
}
int d[20000];
void dijkstra(int root){
    memset(d,0x3f,sizeof d);
    memset(vis,0,sizeof vis);
    d[root]=0;
    q.push(make_pair(0,root));
    while(!q.empty()){
        int u=q.top().second;q.pop();
        if(vis[u])
            continue;
        vis[u]=1;
        for(int e=head[u];e;e=next[e]){
            int v=vet[e],value=val[e];
            if(d[v]>d[u]+value)
                d[v]=d[u]+value;
            q.push(make_pair(-d[v],v));
        }   
    }
}
int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    int x,y,value;
    for(int i=1;i<=m;i++){
        scanf("%d%d%d",&x,&y,&value);
        add(x,y,value);
    }
    dijkstra(1);
    for(int i=1;i<=n;i++)
        printf("%d ",d[i]);
    printf("\n");
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章