dijkstra堆优化模板

Posted wls001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dijkstra堆优化模板相关的知识,希望对你有一定的参考价值。

 1 #include<iostream>
 2 #include<cmath>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<queue>
 7 #define inf 2147483647
 8 using namespace std;
 9 struct data
10 {
11     int from,to,next,w;
12     data(){from=-1,to=-1,next=-1,w=-1;}
13 }e[2000];
14 struct pa
15 {
16     int u,w;
17     bool operator <(const pa& a)const
18     {
19         return w>a.w;
20     }
21 };
22 int n,m;
23 int head[2000];
24 int d[2000],p[2000];
25 bool vis[2000];
26 int cnt=0;
27 void add(int u,int v,int w){e[cnt].from=u,e[cnt].to=v;e[cnt].next=head[u],head[u]=cnt,e[cnt].w=w,cnt++;}
28 void dijkstra(int s)
29 {
30     priority_queue<pa> q;
31     for(int i=1;i<=n;i++) d[i]=inf;
32     q.push((pa){s,0});
33     d[s]=0;
34     memset(vis,0,sizeof(vis));
35     while(!q.empty())
36     {
37         pa x=q.top();
38         q.pop();
39         if(vis[x.u]) continue;
40         vis[x.u]=1;
41         for(int i=head[x.u];i>=0;i=e[i].next)
42         {
43             if(d[e[i].to]>d[e[i].from]+e[i].w)
44             {
45                 d[e[i].to]=d[e[i].from]+e[i].w;
46                 p[e[i].to]=i;
47                 q.push((pa){e[i].to,d[e[i].to]});
48             }
49         }
50     }
51 }
52 int main()
53 {
54     memset(head,-1,sizeof(head));
55     scanf("%d%d",&n,&m);
56     for(int i=1;i<=m;i++)
57     {
58         int u,v,w;
59         scanf("%d%d%d",&u,&v,&w);
60         add(u,v,w);
61         add(v,u,w);
62     }
63     int s,t;
64     scanf("%d%d",&s,&t);
65     dijkstra(s);
66     cout<<d[t];
67 }
View Code

 

以上是关于dijkstra堆优化模板的主要内容,如果未能解决你的问题,请参考以下文章

[OI - 模板] 堆优化Dijkstra

hdu 2544 单源最短路问题 dijkstra+堆优化模板

[模板] dijkstra (堆优化)

P4779 模板单源最短路径(标准版)二叉堆优化的 Dijkstra

HDU 2544 - 最短路 - [堆优化dijkstra][最短路模板题]

堆优化dijkstra+set优化dijkstra