#include <algorithm>#include<iostream>#include<cstdio>#include<cstring>#include<queue>#defineM 100000#definePA pair<int,int>//Prioritize first element comparisonusing namespacestd;intd[m],n,m,cnt,head[m],next[m],u[m],dis[m],num,s,t;BOOLF[m];voidAddint from,intTo,intdi) {num++; U[num]=to ; Next[num]=head[ from]; head[ from]=num; Dis[num]=di;}intMain () {scanf ("%d%d%d%d",&n,&m,&s,&t); for(intI=1; i<=m;i++) { intuu,vv,d; scanf ("%d%d%d",&uu,&vv,&d); Add (uu,vv,d); Add (vv,uu,d); } memset (d,127/3,sizeof(d)); D[s]=0; Priority_queue<pa,vector<pa>,greater<pa> > Q;//Heap OptimizationQ.push (Make_pair (0, s));//Make a PA distance s of 0 marking s while(!Q.empty ()) { intP=q.top (). Second;//Take out the highest-priority point.Q.pop (); if(F[p])//sentence weight Continue; F[P]=1; for(intI=head[p];i;i=Next[i]) { if(d[u[i]]>d[p]+Dis[i]) {D[u[i]]=d[p]+Dis[i]; Q.push (Make_pair (d[u[i]],u[i));//Make a new PA} }} cout<<D[t]; return 0;}
Heap optimization of DIJ