#include <iostream>
#include <queue>
using namespace std;const int N = 100010;
//first存储距离 second 存储节点
typedef pair<int ,int> PII;
//用邻接表来存储稀疏图
//用优先队列来优化每次找最短的那个节点 int n,m;//n表示节点个数 m表示边的个数
int Head[N],Weight[N],Value[N],Next[N],Index;//数组模拟的邻接表
bool S[N];//是否已经求了最短距离
int Dis[N];//存储最短距离 //邻接表插入边
void Add(int nStart, int nEnd, int nWeight)
{Weight[Index] = nWeight;Value[Index] = nEnd;Next[Index] = Head[nStart];Head[nStart] = Index;Index++;
}void Dijkstra()
{//初始化Dis数组 fill(Dis,Dis+N,0x3f3f3f3f);//定义优先队列  priority_queue<PII,vector<PII>,greater<PII> >Heap;Heap.push(make_pair(0,1));Dis[1] = 0;while(Heap.size()){int ver = Heap.top().second;int distance = Heap.top().first;Heap.pop();//如果这个点已经被加入到S中 if(S[ver]){continue;    }S[ver] = true;for(int i = Head[ver]; i != -1; i = Next[i]){int j = Value[i];if(Dis[j] > distance + Weight[i]){Dis[j] = distance + Weight[i];Heap.push(make_pair(Dis[j],j));}} }
} int main(int argc, char** argv)
{fill(Head,Head+N,-1);scanf("%d%d",&n,&m);while(m--){int nStart,nEnd,nWeight;scanf("%d%d%d",&nStart,&nEnd,&nWeight);Add(nStart,nEnd,nWeight);}Dijkstra();for(int i = 1; i <= n; i++){cout<<Dis[i]<<" ";   } return 0;
}

堆优化的Dijkstra相关推荐

  1. 最短路[Dijkstra和堆优化的Dijkstra][Bellman-Ford和SPFA][Floyd最短路](更新中)

    文章目录 第一类:单源最短路 一 所有边权都是正数(Dijkstra) 朴素版Dijkstra(稠密图) 堆优化版Dijkstra(稀疏图) 二 存在负权边(BF和SPFA) 第二类:多源汇最短路(F ...

  2. c++ 堆优化版dijkstra 代码实现

    dijkstra是图论中解决最短路问题的重要算法之一,必须熟练掌握 dijkstra用于解决单源最短路问题,要求图中必须不存在负边权 朴素dijkstra的时间复杂度为O(n^2),堆优化版dijks ...

  3. 堆优化版dijkstra算法:AcWing 850. Dijkstra求最短路 II

    堆优化版dijkstra算法分析: 朴素版dijkstra的时间复杂度为O(n^2),主要瓶颈在于第1步的寻找全局最小值的过程. 可以用小根堆(C++STL priority_queue)对dist数 ...

  4. AcWing 850. Dijkstra求最短路 II【最短路】【堆优化版Dijkstra】

    AcWing 850. Dijkstra求最短路 II 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 850. Dijkstra求 ...

  5. ~~堆优化版dijkstra

    时间复杂度 O(mlogn), n 表示点数,m 表示边数 typedef pair<int, int> PII;int n; // 点的数量 int h[N], w[N], e[N], ...

  6. PAT甲级1131 Subway Map (30分):[C++题解]堆优化dijkstra、单源最短路、地铁地图、巧妙地建图套dijkstra模板!!

    文章目录 题目分析 题目链接 题目分析 原题: 来源:acwing 分析: 建图:所有能走到的点之间建立一条边,比如下面一条地铁线路有4站,它们是相通的,两两之间建一条边,边权是经过的站点数. 下面考 ...

  7. Dijkstra算法与其最小堆优化

    (仿佛回到了当年打比赛的时候呢 POJ 3013(Big Christmas Tree) 传送门:http://poj.org/problem?id=3013 题目大意:由一堆顶点和边构造出一棵圣诞树 ...

  8. [堆优化Dijkstra] 小木乃伊到我家

    小木乃伊到我家 (nowcoder.com)https://ac.nowcoder.com/acm/problem/15549 题目描述 AA的欧尼酱qwb是个考古学家,有一天qwb发现了只白白圆圆小 ...

  9. PAT甲级1003 Emergency Dijkstra算法(堆优化版/朴素版)

    前言   最近花了很多的时间在写JAVA项目上面,疏忽了算法和数据结构的学习.最近突然醒悟基础更为重要,打算从今天开始每天抽出一些时间做下PAT甲级的题目.现有题库的前两题很简单,从第三题开始吧. 题 ...

  10. 【bzoj5197】[CERC2017]Gambling Guide 期望dp+堆优化Dijkstra

    题目描述 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易时,你可以选择 ...

最新文章

  1. 用Python分析北上广深租房情况,租房时优先考虑哪些因素?
  2. BS-XX-026 基于SpringBoot 实现个人理财系统
  3. 编写规范--Web前端开发修炼之道
  4. iviewui php,Vue UI框架对比:Element UI、Ant Design Vue、iView
  5. boost::mpi::wait_all相关用法的测试程序
  6. 看你知道不知道之-制作数据字典
  7. 给大家提炼几个产品经理的核心点
  8. JavaScript从入门到放弃 -(三)ES5新增方法及商品查询案例
  9. 23个Python爬虫开源项目代码Python爬虫开源项目代码
  10. 奇怪的比赛|2012年蓝桥杯B组题解析第四题-fishers
  11. VK1640兼用TM1640
  12. 微电子 半导体 网址 一览表
  13. Unix.Trojan.Agent-37008木马查杀
  14. An exception occurred while acquiring a poolable resource. Will retry.
  15. 华为社招嵌入式软件面试_华为社招面试感受 痛苦 悲催
  16. JAVA Applet——绘制心形曲线
  17. BERT知识蒸馏TinyBERT
  18. 服装管理系统c语言(大一)
  19. 黄芪桂圆枸杞红枣茶的作用
  20. 从ReentrantLock到AQS

热门文章

  1. 公钥,私钥,数字签名,证书
  2. mybatis 实现批量更新
  3. CUBA Platform 7.0.3 发布,企业级应用开发平台
  4. Java泛型之类型擦除
  5. Java-final最终修饰符
  6. 洛谷P3698 [CQOI2017]小Q的棋盘
  7. CentOS6.5下安装Open vSwitch
  8. 微信小程序的三级分销-项目表格设计
  9. (附源码)Flutter Demo
  10. Vue.js对数组对象的序号字段初始化重新生成序号