[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不能处理负边权) 所以还得现学... 白点表示已经确定最短路径的点. 蓝点表示还未确定最短路径的 ...
随机推荐
- Android 签名工具 shell脚本
signApk.sh #!/bin/bash #$1 signed and unaligned apk #$2 unsigned apk #$3 aligned apk #./signApk.sh t ...
- jQuery核心之那些有效的方法
jQuery提供了一些很有效的方法,这些方法都在$命名空间之下,对常规的编码很有帮助,完整的api详见:utilities documentation on api.jquery.com $.trim ...
- setColorFilter()滤镜
----------转载于:http://blog.sina.com.cn/s/blog_5da93c8f01012pkj.html 通过setColorFilter可以实现滤镜效果. 如: ...
- android ViewGroup事件分发机制
1:事件分销过程 自定义一个LinearLayout,重写dispatchTouchEvent onInterceptTouchEvent onTouchEvent,定义一个按键重写dispathcT ...
- 【转】 void与void*详解
void关键字的使用规则: 1. 如果函数没有返回值,那么应声明为void类型: 2. 如果函数无参数,那么应声明其参数为void: 3. 如果函数的参数可以是任意类型指针,那么应声明其参数为void ...
- KindEditor4.1.10,支持粘贴图片(转载!)
本人扩展了KindEditor4.1.10,使得他能够在Chrome和IE11中直接粘贴复制的图片(比如通过截图工具把图片直接保存在剪切板中),然后调用上传URL上传图片 方法,修改kindedito ...
- mysql分组查询取分组后各分组中的最新一条记录
SELECT * FROM ( SELECT * FROM `CFG_LOGIN_LOG` ORDER BY LOGTIME DESC ) test GROUP BY login_name DESC
- Java—Applet
1 Applet的定义 Applet是Java语言编写的,无法独立运行,但可以嵌入到网页中执行.它扩展了传统的编程结构和方法,可以通过互联网发布到任何具有Java编译环境浏览器的个体计算机上. 如下 ...
- cmd 打开gitshell
C:\Users\Username\AppData\Local\GitHub\GitHub.appref-ms --open-shell
- 必备技能:分清楚DOM的attribute和property
分清楚DOM的attribute和property,用JQ的时候分清楚attr,和prop方法,网上有很多大神的总结,我就不列举了.