[dijkstra+heap优化] 模板
var
n,m,s,i,j,x,y,z,l,tot :longint;
pre,last,other,len :array[..] of longint;
heap,d,pl :Array[..] of longint; procedure swap(var x,y:longint);
var
z :longint;
begin
z:=x;
x:=y;
y:=z;
end; procedure add(u,v,r:longint);
begin
inc(l);
pre[l]:=last[u];
last[u]:=l;
other[l]:=v;
len[l]:=r;
end; procedure up(x:longint);
var
i :longint;
begin
i:=x;
while (i>>)> do
begin
if (d[heap[i>>]]<=d[heap[i]]) then break;
swap(heap[i],heap[i>>]);
pl[heap[i]]:=i;
pl[heap[i>>]]:=i>>;
i:=i>>;
end;
end; procedure down(x:longint);
var
i,j :longint;
begin
i:=x;
while (i<<)<=tot do
begin
j:=i<<;
if (j+<=tot) and (d[heap[j+]]<d[heap[j]]) then inc(j);
if (d[heap[i]]<=d[heap[j]]) then break;
swap(heap[i],heap[j]);
pl[heap[i]]:=i;
pl[heap[j]]:=j;
i:=j;
end;
end; procedure delete(x:longint);
begin
heap[x]:=heap[tot];
dec(tot);
pl[heap[x]]:=x;
down(x);
end; procedure dijkstra;
var
cur,p,q,i :longint;
begin
for i:= to n do
begin
cur:=heap[];
delete();
p:=last[cur];
while p<> do
begin
q:=other[p];
if d[q]>d[cur]+len[p] then
begin
d[q]:=d[cur]+len[p];
up(pl[q]);
end;
p:=pre[p];
end;
end;
end; begin
//assign(input,'input.txt');reset(input);
//assign(output,'output.txt');rewrite(output);
read(n,m,s);
for i:= to m do
begin
read(x,y,z);
add(x,y,z);
end;
for i:= to n do d[i]:=maxlongint>>;
d[s]:=;
for i:= to n do
begin
heap[i]:=i;
pl[i]:=i;
end;
up(s);
tot:=n;
dijkstra;
for i:= to n do if d[i]=maxlongint>> then d[i]:=;
for i:= to n do write(d[i],' ');
close(input);
close(output);
end.
[dijkstra+heap优化] 模板的更多相关文章
- hdu 2544 单源最短路问题 dijkstra+堆优化模板
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 最短路--dijkstra+优先队列优化模板
不写普通模板了,还是需要优先队列优化的昂 #include<stdio.h> //基本需要的头文件 #include<string.h> #include<queue&g ...
- Dijkstra + 优先队列优化 模板
#include <cstdio> #include <cstring> #include <queue> #include <vector> #inc ...
- dijkstra堆优化模板
#include<iostream> #include<cmath> #include<algorithm> #include<cstring> #in ...
- Luogu P4779 【模板】单源最短路径(标准版)(Dijkstra+堆优化模板)
qwq dij其实和prim挺像的,prim是找权值最小点,dij是找边, 用一个优先队列就可以在加入边的时候直接排序,避免了每次遍历更新min priority_queue <pair< ...
- (模板)poj2387(dijkstra+优先队列优化模板题)
题目链接:https://vjudge.net/problem/POJ-2387 题意:给n个点(<=1000),m条边(<=2000),求结点n到结点1的最短路. 思路:dijkstra ...
- 地铁 Dijkstra(优先队列优化) 湖南省第12届省赛
传送门:地铁 思路:拆点,最短路:拆点比较复杂,所以对边进行最短路,spfa会tle,所以改用Dijkstra(优先队列优化) 模板 /******************************** ...
- 【最短路算法】Dijkstra+heap和SPFA的区别
单源最短路问题(SSSP)常用的算法有Dijkstra,Bellman-Ford,这两个算法进行优化,就有了Dijkstra+heap.SPFA(Shortest Path Faster Algori ...
- 【模板】Dijkstra的heap优化
为了将最小费用最大流的spfa优化,决定将spfa换成heap优化的Dijkstra.(dijkstra不能处理负边权) 所以还得现学... 白点表示已经确定最短路径的点. 蓝点表示还未确定最短路径的 ...
随机推荐
- jQuery改变兄弟元素样式,及:not([class="allclassname"])筛选小结
以前一直对于jquery感到很畏惧,最近做点击图表变色,将其他元素图片复位的小需求,总结了一下一点小心得. 主要两点是:1.将所有兄弟元素的样式设置为一样,对于子元素的遍历: 2.对于特殊不需要变化的 ...
- Windows上搭建hadoop开发环境
前言 Windows下运行Hadoop,通常有两种方式:一种是用VM方式安装一个Linux操作系统,这样基本可以实现全Linux环境的Hadoop运行:另一种是通过Cygwin模拟Linux环境.后者 ...
- iOS修改手机定位(非越狱任意位置)
利用开发者的一些调试功能,我们可以修改非越狱的苹果手机定位,模拟任意位置. 经测试,此方法仅限开发者调试使用,并不能长时间修改手机定位. 1. 首先需要了解一些坐标系的知识 iOS,原生坐标系为 WG ...
- [转]虚拟机VMware3种网络模式(桥接、nat、Host-only)的工作原理
VMware网络配置详解一:三种网络模式简介 安装好虚拟机以后,在网络连接里面可以看到多了两块网卡: 其 中VMnet1是虚拟机Host-only模式的网络接口,VMnet8是NAT模式的网络接口,这 ...
- iOS开发UI篇—手写控件,frame,center和bounds属性
iOS开发UI基础—手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4 ...
- 设计模式六大原则(5)—迪米特法则
定义: 一个对象应该对其它的对象保持最少的了解.迪米特法则又称为最少知识法则,英文全称为Least Knowledge Principle ,简称为LKP. 个人理解: 迪米特法则主要目的是类间解耦, ...
- java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice
今天在使用动态代理时,遇到了如下问题,报错 java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice 下面是完整的报错信息: 一月 , :: ...
- 例子:Background Agent Sample
通过本例程学习: 后台代理Agent的使用方法 定期代理(PeriodicTask)来说,限制了: 有一些API不能使用,并不是说你不调用就可以了,只要你在同一个程序集里使用了这些API,就不会通过验 ...
- [转]unity3d 脚本参考-技术文档
unity3d 脚本参考-技术文档 核心提示:一.脚本概览这是一个关于Unity内部脚本如何工作的简单概览.Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的.在脚本对象内部不同志的函数被 ...
- rails之 Migrations (转)
1.简介 在rails中用migration可以很方便的管理数据库的结构.可以创建数据库,创建表,删除表,添加字段,删除字段,整理数据. migration就是一系列的class,这些类都继承了Act ...