SSSP dijstra+stl::heap 邻接表模版

Posted noi-aker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSSP dijstra+stl::heap 邻接表模版相关的知识,希望对你有一定的参考价值。

//SSSP dijstra+stl::heap 邻接表模版 
#include<bits/stdc++.h>
using namespace std;
#define why 105
#define whym 1455
#define inf 0x3f3f3f3f
int n,m,d[why],h[why],cnt,s,t;
bool v[why];
struct node

    int next,to,v;
a[whym*2];
struct tap

    int num,v;
    bool operator <(const tap &x)const
    
        return x.num<num;
    
;
inline int redn()

    int ret=0,f=1;
    char ch=getchar();
    while(!isdigit(ch))
    
        if(ch==-)f=-f;
        ch=getchar();
    
    while(isdigit(ch))
    
        ret=ret*10+ch-0;
        ch=getchar();
    
    return f>0?ret:-ret;

inline void dij(int s)

    priority_queue<tap>q;
    tap k;
    d[s]=0;
    q.push((tap)0,s);
    while(!q.empty())
    
        k=q.top();
        q.pop();
        if(v[k.v])continue;
        v[k.v]=1;
        for(int u=h[k.v];u;u=a[u].next)
        
            int j=a[u].to;
            if(d[j]>d[k.v]+a[u].v)
            
                d[j]=d[k.v]+a[u].v;
                if(!v[j])q.push((tap)d[j],j);
            
        
    

inline void DoubleAdd(int x,int y,int z)

    a[++cnt].next=h[x];
    a[cnt].to=y;
    a[cnt].v=z;
    h[x]=cnt;
    a[++cnt].next=h[y];
    a[cnt].to=x;
    a[cnt].v=z;
    h[y]=cnt;

int main()

    int _1,_2,_3;
    register int i;
    n=redn();
    m=redn();
    s=redn();
    t=redn();
    memset(d,0x3f,sizeof(d));
    for(i=1;i<=m;i++)
    
        _1=redn(),_2=redn(),_3=redn();
        DoubleAdd(_1,_2,_3);
    
    dij(s);
    printf("%d",d[t]);
    return 0;

 

以上是关于SSSP dijstra+stl::heap 邻接表模版的主要内容,如果未能解决你的问题,请参考以下文章

Matlab:数模04-图论模型(dijstra算法)

STL -- heap结构及算法

STL---heap概述及用法

STL--heap概述:make_heap,sort_heap,pop_heap,push_heap

算法学习老算法,新姿势,STL——Heap

STL heap部分源代码分析