[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不能处理负边权) 所以还得现学... 白点表示已经确定最短路径的点. 蓝点表示还未确定最短路径的 ...
随机推荐
- GridFS图片
-----------2016-5-9 18:58:56-- source:GridFS实现图片的存取
- SpringMVC报错The request sent by the client was syntactically incorrect ()
springmvc数据绑定出的错 在数据绑定的时候一定要主意Controller方法中的参数名和jsp页面里的参数名字是否一致或者按照绑定的规范来写, 如果不一致,可能回报如下错误: The requ ...
- Spring+Mybatis 手动控制事务
public boolean testDelete(String jobCode) throws Exception { boolean flag = false; //1.获取事务控制管理器 Dat ...
- Software Engineering: 2. Project management
resources:"Software Engineering" Ian Sommerville For most projects, important goals are: D ...
- while 和 for 对比
for 语句实例 本例中的循环使用 for 循环来显示 cars 数组中的所有值: cars=["BMW","Volvo","Saab",& ...
- sanBox部署简介
参考资料:1 http://www.kaaproject.org/getting-started/ 此链接告诉我们部署sandbox的两种方法. 2 http://docs.kaaprojec ...
- (AS3)关于arguments
一.官方说明 点击访问 二.使用心得 arguments包含了当前执行方法的参数,注意,不包含默认参数! arguments可以全局访问,可以在任何方法里访问,除此之外,在定义变量的时候或者初始化的时 ...
- poj1192 最优连通子集(树形dp)
题目链接:poj1192 最优连通子集 求一棵无向树的最大子树和..类似于求最大子段和的办法,树形dp. dp[i][0]:以i为根,不包括 i 结点的子树最大权 dp[i][1]:以i为根,包括 i ...
- 转-浅谈HTTP中Get与Post的区别
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...
- eclipse 本地项目提交到远程库以及从远程库中添加项目 ---git
本地项目提交到远程库 1.右击项目->team->share project 2.选择本地库 从远处库中的项目拉到本地 1.右击项目->import项目