当前位置: 首页 > 编程日记 > 正文

使用最小堆优化Dijkstra算法

OJ5.2很简单,使用priority_queue实现了最小堆竟然都过了OJ……每次遇到relax的问题时都简单粗暴地重新push进一个节点……

然而正确的实现应该是下面这样的吧,关键在于swap堆中元素时使用pos数组存储改变位置后的编号为k的节点对应在堆中的位置。下面这种实现也很简单,d,v,p均存储在堆中,只有pos指明位置。源代码作者很聪明>_<

#include <stdio.h>#define MAXN 1200
#define MAXM 1200000
#define INF 19930317struct node
{int d, v, p;
}heap[MAXN];
int pos[MAXN], hl;int e[MAXM], cost[MAXM], next[MAXM], g[MAXN], size;int m, n, s, t;void insert(int u, int v, int w)
{e[++size] = v;next[size] = g[u];cost[size] = w;g[u] = size;
}void swap(int a, int b)
{heap[0] = heap[a];heap[a] = heap[b];heap[b] = heap[0];pos[heap[a].v] = a;pos[heap[b].v] = b;
}void heapfy()
{int i = 2;while (i <= hl){if ((i < hl) && (heap[i + 1].d < heap[i].d))i++;if (heap[i].d < heap[i >> 1].d){swap(i, i >> 1);i <<= 1;}elsebreak;}
}void decrease(int i)
{while ((i != 1) && (heap[i].d < heap[i >> 1].d)){swap(i, i >> 1);i >>= 1;}
}void relax(int u ,int v, int w)
{if (w + heap[pos[u]].d < heap[pos[v]].d){heap[pos[v]].p = u;heap[pos[v]].d = w + heap[pos[u]].d;decrease(pos[v]);}
}void delete_min()
{swap(1, hl);hl--;heapfy();
}void init()
{int u ,v ,w, i;scanf("%d%d", &m, &n);for (i = 1; i <= m; i++){scanf("%d%d%d", &u, &v, &w);insert(u, v, w);insert(v, u, w);}s = 1;t = n;
}int dijkstra()
{int u, p, i;for (i = 1; i <= n; i++){heap[i].v = pos[i] = i;heap[i].d = INF;}heap[s].p = s;heap[s].d = 0;swap(1, s);hl = n;while (hl){u = heap[1].v;delete_min();p = g[u];while (p){if (pos[e[p]] <= hl)relax(u, e[p], cost[p]);p = next[p];}}
}
int main() {init();dijkstra();printf("%d\n", heap[pos[t]].d);return 0; }

转载于:https://www.cnblogs.com/Juli016/p/5509904.html

相关文章:

C语言编程技巧-signal(信号机制)

http://blog.sina.com.cn/s/blog_6a1837e90100v1vc.html

第一课:网络参考模型OSI

网络参考模型OSI(一)&#xff1a;模型提出目的&#xff1a;开放系统互连。使各个厂商的设备可以很好的互连、互通、互操作。(二)&#xff1a;各层功能(1):物理层&#xff1a;负责链路上bit流的传输。&#xff08;bit流显著的特点是&#xff0c;不支持格式或者结构&#xff09;。…

在线直播 | 是事实还是贩卖焦虑?IT行业也偏爱“小鲜肉”​

几年前曾看过这样一篇报道&#xff1a;Java 之父求职被嫌年纪大&#xff0c;硅谷公司现在喜欢“小鲜肉”&#xff0c;不爱“老古董”。Java之父 James Gosling 在 Facebook 上发表了他所遭遇的年龄歧视&#xff1a;我曾在面试的时候被 HR 告知&#xff0c;“通常我们不招你这种…

eclipse 代码中突然出现特殊字符

在写代码的时候&#xff0c;不知道点到了 eclipse 的哪个属性&#xff0c;代码中就出现了一些特殊字符&#xff0c;也不能删除。 请问&#xff0c;在 eclipse 中该怎么设置&#xff0c;才能将这些字符去掉。 如下图所示&#xff1a; 解决方法: 选择Window->Preferences->…

如何优化数据中心虚拟机布局

当前已经有很多组织将服务器虚拟化技术引入到生产中&#xff0c;这么做是有道理的&#xff0c;特别是在当前经济并不景气的情况下&#xff0c;因为服务器虚拟化技术可以在服务器硬件&#xff0c;机架空间&#xff0c;电力消耗和制冷方面为组织节省开支。   但为了实现服务器虚…

回归——同步更新github.io

回归 已经有好长时间没写博客了&#xff0c;可能我比较懒&#xff0c;不太乐于分享&#xff0c;我觉得这个是一个很不好的习惯。但我坚信&#xff1a;Sharing changes the world! 最近搭建了自己的个人独立博客&#xff0c;基于Github Pages的&#xff0c;所以打算以后同步更…

支持量子机器学习,王海峰发布最新百度飞桨全景图

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;刚刚&#xff0c;WAVE SUMMIT 2020深度学习开发者峰会上&#xff0c;百度CTO王海峰开场即披露了一组飞桨数据&#xff1a;飞桨累计开发者数量已超过190万&#xff0c;服务企业数量达8.4万家&#xff0c;发布模型数量已…

NPOI读写Excel

1、整个Excel表格叫做工作表&#xff1a;WorkBook&#xff08;工作薄&#xff09;&#xff0c;包含的叫页&#xff08;工作表&#xff09;&#xff1a;Sheet&#xff1b;行&#xff1a;Row&#xff1b;单元格Cell。 2、NPOI是POI的C#版本&#xff0c;NPOI的行和列的index都是从…

我的vim捣鼓之路

2016-06-13 更新 绑定独立博客到域名rebootcat.com 2016-06-12 更新文中的几个链接错误&#xff0c;google search报错 前言 从大二的时候就开始接触Linux了&#xff0c;从而也接触了vi,对的&#xff0c;当时对这些还不太了解&#xff0c;不知道还有个vim&#xff0c;真的觉得…

代码写对了还挂了?程序媛小姐姐从 LRU Cache 带你看面试的本质

来源 | 码农田小齐责编 | Carol 前言在讲这道题之前&#xff0c;我想先聊聊「技术面试究竟是在考什么」这个问题。技术面试究竟在考什么在人人都知道刷题的今天&#xff0c;面试官也都知道大家会刷题准备面试&#xff0c;代码大家都会写&#xff0c;那面试为什么还在考这些题&…

广船国际股份有限公司OA项目

2003年的老案例&#xff1a; 背景 广船国际股份有限公司是由原中国船舶工业总公司属下国有企业广州造船厂在1993年改组、在上海和香港同期上市的股份有限公司&#xff0c;公司享有自营进出口权。 广船国际于2002年3月通过评标后选定采用iOffice.net信息管理平台作为信息化建设…

注册表----修改Win7登录界面

在进行操作前&#xff0c;需要准备好背景图片。对背景图片的要求有三点&#xff1a; &#xff08;1&#xff09;图片必须是JPG格式&#xff1b; &#xff08;2&#xff09;必须将图片命名为backgroundDefault; &#xff08;3&#xff09;图片的体积必须小于256KB。 按下【WinR】…

定义自己的rm command

rm 是一个很危险的命令&#xff0c;别人一直说&#xff0c;我并没有在意&#xff0c;直到有一天一个不小心&#xff0c;忘记当前目录的位置&#xff0c;手贱的使用了rm命令&#xff0c;结果花了半天也没有把那些重要资料给恢复过来。所以还是有必要给自己定义一个不那么危险的r…

出任 Twitter 独立董事,AI 女神李飞飞的传奇人生

作者 | 年素清责编 | 伍杏玲出品 | 程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 近日&#xff0c;Twitter宣布任命斯坦福大学计算机科学教授、前谷歌副总裁李飞飞为董事会独立董事。李飞飞本人表示&#xff1a;“推特是科技连接世界的一个重要平台&#xff0c;…

apache ab压力测试

2019独角兽企业重金招聘Python工程师标准>>> ab的原理&#xff1a;ab命令会创建多个并发访问线程&#xff0c;模拟多个访问者同时对摸一个URL地址进行访问。它的测试目标是基于URL的&#xff0c;因此它既可以用来测试apache的负载压力&#xff0c;也可以测试nginx、…

我的个人博客搭建记录

6/13更新 绑定个人博客到域名 rebootcat.com 前言 本篇博客旨在备忘&#xff0c;并记录了自己折腾了3,4天后顺利搭建自己的个人博客过程中碰到的一部分问题。 搭建个人独立博客有很多种方法&#xff0c;我暂时采用的是基于github Pages的免费博客&#xff0c;博客框架采用he…

oracle中创建触发器

从csdn上面看到一个如何创建触发器的问题&#xff0c;感觉自己很有必要保存学习&#xff0c;特写下来&#xff1a;条件&#xff1a;现有A、B两张表A&#xff1a; 工号 姓名 密码 性别 年龄 。。。B&#xff1a; 工号 姓名 密码当对A表中的“密码”字段进行修改时,B表中的“密码…

量子计算与AI“双拳”出击,他们锁定38种潜在抗疫药物

作者 | Just出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;医药研发行业有一个“三个十”的说法&#xff0c;即一种药物的发现需要投入十年以上的时间&#xff0c;花费十多亿美元&#xff0c;最后获得10%的成功率。也就是说&#xff0c;医药研发需要花费很长时间&am…

Android官方开发文档Training系列课程中文版:OpenGL绘图之应用投影与相机视图

原文地址&#xff1a;http://android.xsoftlab.net/training/graphics/opengl/projection.html##transform 在OpenGL ES环境中&#xff0c;投影相机View可以将所绘制的图形模拟成现实中所看到的物理性状。这种物理模拟是通过改变对象的数字坐标实现的&#xff1a; 投影 - 这基于…

Python分析101位《创造营2020》小姐姐,谁才是你心中的颜值担当?

来源 | CDA 数据分析师责编 | Carol Show me data&#xff0c;用数据说话。今天我们聊一聊《创造营2020》各个小姐姐&#xff0c;点击下方视频&#xff0c;先睹为快&#xff1a; 最近可以追的综艺真是太多了&#xff0c;特别是女团选秀节目。之前我们刚聊过《青春有你2》&…

体验Remix——安卓电脑

第一次听说Android-X86 以前玩唱吧的时候接触过PC上的安卓模拟器&#xff0c;不过这个只是一个软件&#xff0c;效果毕竟不好&#xff0c;想要把电脑变成安卓手机&#xff0c;还差远了。 然后&#xff0c;前段时间一直纠结要不要换个手机&#xff0c;我现在的华为小6已经跟我…

重置 microsoft visual studio窗口

“工具”->“导入导出设置”—>“重置所有设置”&#xff0c;在这个向导中可以重置编译环境的&#xff01;转载于:https://www.cnblogs.com/qiantuwuliang/archive/2011/05/31/2064825.html

排序算法总结之堆排序

一&#xff0c;堆排序介绍 堆是一个优先级队列&#xff0c;对于大顶堆而言&#xff0c;堆顶元素的权值最大。将 待排序的数组 建堆&#xff0c;然后不断地删除堆顶元素&#xff0c;就实现了排序。关于堆&#xff0c;参考&#xff1a;数据结构--堆的实现之深入分析 下面的堆排序…

Hessian通信案例(java)

个人博客&#xff1a; 戳我,戳我 前言 由于工作的原因&#xff0c;接触到了hessain,项目需要做hessain和xml之间的报文转换。但是对于hessian是个什么东西一头雾水。于是接下来的时间了解了hessain协议的序列化规则以及hessian协议进行通信的方式。这篇文章是在完成了这个模块…

VDI序曲二十一 APP-V 4.6 SP1服务器端部署

APP-V是微软应用程序虚拟化除RemoteApp以外非常棒的另一种应用程序虚拟化&#xff0c;此应用程序虚拟化是把搭开应用程序消耗的资源放在前端&#xff0c;应用程序虚拟化主要解决的还是软件兼容性问题和保护软件资产问题&#xff0c;同时让用户无需安装就可以绿色使用的手段&…

绝悟之后再超神,腾讯30篇论文入选AI顶会ACL

作者 | 马超责编 | Carol出品| AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;封图 | CSDN 付费下载于东方 IC近日&#xff0c;国际计算语言学协会年会ACL在官网(https://www.aclweb.org)公布了2020年度的论文收录名单&#xff0c;其中腾讯共有30篇论文入选&…

mac中用命令行运行mysql

1&#xff0c;安装mysql 在mysql的官方网站下载 mysql 5.5.23 http://www.mysql.com/downloads/mysql/&#xff0c;根据我的机器的配置情况选择了64bit版本。 2&#xff0c;命令行中启动mysql 安装的位置在/usr/local/mysql 于是做了一个别名&#xff1a; $alias mysql/usr/loc…

Hessian源码分析(java)

个人博客&#xff1a; 戳我&#xff0c;戳我 先扯一扯 前一篇博文Hessian通信案例(java)简单实现了Java版的Hessian客户端和服务端的通信&#xff0c;总体看来&#xff0c;实现起来比较简单&#xff0c;整个基于Hessian的远程调用过程也显得很方便。但是知其然还要知其所以然&…

必读!53个Python经典面试题详解

作者 | Chris翻译 | 苏本如&#xff0c;编辑 | 夕颜题图 | 视觉中国出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;本文列出53个Python面试问题&#xff0c;并且提供了答案&#xff0c;供数科学家和软件工程师们参考。不久前&#xff0c;我作为“数据科学家”开始担…

Microsoft Web 平台安装程序 (Web PI) Microsoft Web Platform Installer

Microsoft Web 平台安装程序 3.0 (Web PI) 是一款免费的工具&#xff0c;使用它可以获得 Microsoft Web 平台的最新组件&#xff08;包括 Internet Information Services (IIS)、SQL Server Express、.NET Framework 和 Visual Web Developer&#xff09;。Web PI 的内置Window…