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优化] 模板的更多相关文章

  1. hdu 2544 单源最短路问题 dijkstra+堆优化模板

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

  2. 最短路--dijkstra+优先队列优化模板

    不写普通模板了,还是需要优先队列优化的昂 #include<stdio.h> //基本需要的头文件 #include<string.h> #include<queue&g ...

  3. Dijkstra + 优先队列优化 模板

    #include <cstdio> #include <cstring> #include <queue> #include <vector> #inc ...

  4. dijkstra堆优化模板

    #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #in ...

  5. Luogu P4779 【模板】单源最短路径(标准版)(Dijkstra+堆优化模板)

    qwq dij其实和prim挺像的,prim是找权值最小点,dij是找边, 用一个优先队列就可以在加入边的时候直接排序,避免了每次遍历更新min priority_queue <pair< ...

  6. (模板)poj2387(dijkstra+优先队列优化模板题)

    题目链接:https://vjudge.net/problem/POJ-2387 题意:给n个点(<=1000),m条边(<=2000),求结点n到结点1的最短路. 思路:dijkstra ...

  7. 地铁 Dijkstra(优先队列优化) 湖南省第12届省赛

    传送门:地铁 思路:拆点,最短路:拆点比较复杂,所以对边进行最短路,spfa会tle,所以改用Dijkstra(优先队列优化) 模板 /******************************** ...

  8. 【最短路算法】Dijkstra+heap和SPFA的区别

    单源最短路问题(SSSP)常用的算法有Dijkstra,Bellman-Ford,这两个算法进行优化,就有了Dijkstra+heap.SPFA(Shortest Path Faster Algori ...

  9. 【模板】Dijkstra的heap优化

    为了将最小费用最大流的spfa优化,决定将spfa换成heap优化的Dijkstra.(dijkstra不能处理负边权) 所以还得现学... 白点表示已经确定最短路径的点. 蓝点表示还未确定最短路径的 ...

随机推荐

  1. C语言细节——献给初学者(二)

    C语言细节——献给初学者(二) 主题  循环运用+选择判断 C语言循环有for和while/do...while: 选择判断有:if...else和switch...case 在循环中需要注意搭配br ...

  2. 【hdu4366】dfs序线段树

    #include <bits/stdc++.h> #define ll long long #define lson l, m, rt<<1 #define rson m+1, ...

  3. 【转】Linux系统启动过程分析

    [转]Linux系统启动过程分析 转自:http://blog.chinaunix.net/uid-23069658-id-3142047.html 经过对Linux系统有了一定了解和熟悉后,想对其更 ...

  4. Decorator

    1 意图:动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更灵活. 2 别名:包装器Wrapper 3 动机:将组件嵌入到另一个对象中,由这个对象添加边框.嵌入的 ...

  5. 不再折腾-----hadoop-1.2.1完全分布式安装

    准备工作 三台虚拟机,强烈推荐vmware + centos6.5 三台虚拟机均设有hadoop用户 IP地址设置 IP地址 hostname 192.168.11.100 master 192.16 ...

  6. (36)老版和新版API调用

    ---------更新时间18:06 2016-09-18 星期日------- *前言   我用的是odoo8,但里面有相当多的api是以前版本,这时若我们自己开发的   插件采用新版本api,里面 ...

  7. 介绍开源的.net通信框架NetworkComms框架之七 数据加密通信

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  8. Nullable<>

    Nullable<>是一个结构,但是怎么能让此结构=null,这是编译器的一个比较特殊的,他会new一个该结构的实例去赋值.Nullable<>有一个属性是HasValue,是 ...

  9. 【个人使用.Net类库】(4)验证码类

    验证码是现在管理系统常用的一种保护用户帐户信息的一种功能. 验证码可以有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,虽然这可能是我们登录麻烦一点,但是对用户的密码安全来 ...

  10. android 自定义view -- 实现自定义 邮箱验证的Edittext

    //onFinishInflate 当View中所有的子控件均被映射成xml后触发 /** * 实现自定义 实现邮箱验证的EidtText */public class CustomEditText ...