1#include <iostream>2#include <cmath>3#include <algorithm>4#include <cstring>5#include <cstdio>6#include <queue>7 #defineINF 21474836478 using namespacestd;9 structDataTen { One int from, to,next,w; AData () { from=-1, to=-1, next=-1, w=-1;} -}e[ -]; - structPA the { - intu,w; - BOOL operator< (ConstPA a)Const - { + returnW>A.W; - } + }; A intn,m; at inthead[ -]; - intd[ -],p[ -]; - BOOLvis[ -]; - intCnt=0; - voidAddintUintVintW) {e[cnt]. from=u,e[cnt].to=v;e[cnt].next=head[u],head[u]=cnt,e[cnt].w=w,cnt++;} - voidDijkstraints) in { -Priority_queue<pa>Q; to for(intI=1; i<=n;i++) d[i]=inf; +Q.push (PA) {s,0}); -d[s]=0; thememset (Vis,0,sizeof(Vis)); * while(!q.empty ()) $ {Panax NotoginsengPA x=q.top (); - Q.pop (); the if(Vis[x.u])Continue; +vis[x.u]=1; A for(inti=head[x.u];i>=0; i=e[i].next) the { + if(D[e[i].to]>d[e[i]. from]+E[I].W) - { $D[e[i].to]=d[e[i]. from]+E[I].W; $P[e[i].to]=e[i]. from; - Q.push ((PA) {e[i].to,d[e[i].to]}); - } the } - }Wuyi } the intMain () - { Wumemset (head,-1,sizeof(head)); -scanf"%d%d",&n,&m); About for(intI=1; i<=m;i++) $ { - intu,v,w; -scanf"%d%d%d",&u,&v,&W); - Add (u,v,w); A Add (v,u,w); + } the ints,t; -scanf"%d%d",&s,&t); $ Dijkstra (s); thecout<<D[t]; the}View Code
Dijkstra Heap Optimization Template