Dijkstra堆优化学习

时间:2022-08-29 23:12:45

最短路径例题

今天特地学习了Dijkstra的堆优化(主要是慕名已久)。

我们需要一个堆来记录[编号,到编号这个点的最短路径值(当然只是当前的)]

与原来的Dijkstra操作基本一致,主要有以下几点:

1.将起点放入堆中

2.开始while循环

3.取出堆顶

4.如果已经拓展过就continue

5.松弛操作同时满足条件放入堆

6.repeat step3

code

#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
struct node{
int val,num;
bool operator <(const node &x) const {
return val>x.val;
}
};
priority_queue< node > dij;
vector <pair<int,int> >a[];
int n,m,s,dist[],done[];
int main(){
scanf("%d%d%d",&n,&m,&s);
for(int i=;i<=m;i++){
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
a[x].push_back(make_pair(y,c));
}
for(int i=;i<=n;i++)dist[i]=;
dist[s]=;
dij.push((node){,s});
while(!dij.empty()){
int front=dij.top().num;
dij.pop();
if(done[front])continue;
done[front]=true;
for(int i=;i<a[front].size();i++){
int to=a[front][i].first,vl=a[front][i].second;
if(!done[to]&&dist[front]+vl<dist[to]){
dist[to]=dist[front]+vl;
dij.push((node){dist[to],to});
}
}
}
for(int i=;i<=n;i++)printf("%d ",dist[i]);
return ;
}

Dijkstra堆优化学习的更多相关文章

  1. POJ 2502 - Subway Dijkstra堆优化试水

    做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...

  2. Bzoj 2834&colon; 回家的路 dijkstra&comma;堆优化&comma;分层图&comma;最短路

    2834: 回家的路 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 62  Solved: 38[Submit][Status][Discuss] D ...

  3. POJ2387(dijkstra堆优化)

    Til the Cows Come Home Bessie is out in the field and wants to get back to the barn to get as much s ...

  4. hdu 2544 单源最短路问题 dijkstra&plus;堆优化模板

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  5. 深入理解dijkstra&plus;堆优化

    深入理解dijkstra+堆优化 其实就这几种代码几种结构,记住了完全就可以举一反三,所以多记多练多优化多思考. Dijkstra   对于一个有向图或无向图,所有边权为正(边用邻接矩阵的形式给出), ...

  6. dijkstra堆优化&lpar;multiset实现->大大减小代码量&rpar;

    例题: Time Limit: 1 second Memory Limit: 128 MB [问题描述] 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣 ...

  7. POJ-2387&period;Til the Cows Come Home&period;&lpar;五种方法:Dijkstra &plus; Dijkstra堆优化 &plus; Bellman-Ford &plus; SPFA &plus; Floyd-Warshall&rpar;

    昨天刚学习完最短路的算法,今天开始练题发现我是真的菜呀,居然能忘记邻接表是怎么写的,真的是菜的真实...... 为了弥补自己的菜,我决定这道题我就要用五种办法写出,并在Dijkstra算法堆优化中另外 ...

  8. POJ 1511 - Invitation Cards 邻接表 Dijkstra堆优化

    昨天的题太水了,堆优化跑的不爽,今天换了一个题,1000000个点,1000000条边= = 试一试邻接表 写的过程中遇到了一些问题,由于习惯于把数据结构封装在 struct 里,结果 int [10 ...

  9. 【Dijkstra堆优化】洛谷P2243电路维修

    题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和James,可是一直也没能给 ...

随机推荐

  1. Android使用SAX解析XML&lpar;5&rpar;

    parse_handler.java文件: package com.hzhi.my_sax; import org.xml.sax.Attributes; import org.xml.sax.SAX ...

  2. &lbrack;Angular 2&rsqb; Using Array &period;&period;&period;spread to enforce Pipe immutability

    Pipes need a new reference or else they will not update their output. In this lesson you will use th ...

  3. &amp&semi;quot&semi;ScrollView can host only one direct child&amp&semi;quot&semi;问题解决了

    1. 问题叙述性说明: (请注意以下几点大胆). ScrollView作为顶层view时报错,直接导致apk崩溃.具体错误信息例如以下: 12-21 09:12:15.150: D/AndroidRu ...

  4. &lbrack;转&rsqb;linux中颜色的含义

    绿色文件---------- 可执行文件,可执行的程序 红色文件-----------压缩文件或者包文件 蓝色文件----------目录  www.2cto.com     白色文件-------- ...

  5. 4&period;0、Android Studio配置你的构建

    Android构建系统编译你的app资源和源码并且打包到APK中,你可以用来测试,部署,签名和发布.Android Studio使用Gradle,一个高级的构建套件,来自动化和管理构建进程,同时可以允 ...

  6. requests使用&OpenCurlyDoubleQuote;proxy”代理访问接口

    在requests中使用proxy代理访问 使用前先更新requests版本为支持socks的版本.   先pip安装对应库:  >> pip install -U requests[so ...

  7. Swift 4 Hex Color

    上点干货,写个extension, 可以通过hex值去设置Color,以及通过UIColor的color case 去得到hex值. extension UIColor {     var toHex ...

  8. SSH连接Linux操作:

    Centos6.5的操作: 1:需要下载一个Xshell连接工具: 2:在Linux输入ifconfig,查看IP地址, 3:使用Xshell连接 Ubuntu的操作: 1:需要下载一个Xshell连 ...

  9. Java框架之Struts2(四)

    一.ComboGrid 扩展自$.fn.combo.defaults和$.fn.datagrid.defaults.使用$.fn.combogrid.defaults重写默认值对象.数据表格下拉框结合 ...

  10. weblogic连接池过小导致TPS呈周期性跳坑现象

    利用晚上时间跑个12小时稳定性,第二天发现TPS曲线图成了这个样子. 排查步骤: 1.观察TPS图发现,几乎每两个小时TPS掉一次坑,是周期性的,而且TPS有掉到0的现象.LR上也有失败的交易,猜想是 ...