码迷,mamicode.com
首页 > 其他好文 > 详细

Dij的堆优化

时间:2016-04-25 22:30:20      阅读:370      评论:0      收藏:0      [点我收藏+]

标签:


#include<algorithm> #include<iostream> #include<cstdio> #include<cstring> #include<queue> #define M 100000 #define pa pair<int,int>//优先比较第一个元素 using namespace std; int d[M],n,m,cnt,head[M],next[M],u[M],dis[M],num,s,t; bool f[M]; void add(int from,int to,int di) { num++; u[num]=to; next[num]=head[from]; head[from]=num; dis[num]=di; } int main() { scanf("%d%d%d%d",&n,&m,&s,&t); for(int i=1;i<=m;i++) { int uu,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;//堆优化 q.push(make_pair(0,s));//make一个pa 距离s为0 标号为s while(!q.empty()) { int p=q.top().second;//取出优先级最高的点的 q.pop(); if(f[p])//判重 continue; f[p]=1; for(int i=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一个新的 pa } } } cout<<d[t]; return 0; }

 

Dij的堆优化

标签:

原文地址:http://www.cnblogs.com/yanlifneg/p/5432822.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!