题目背景

2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路。

然后呢?

100→60

Ag→Cu

最终,他因此没能与理想的大学达成契约。

小 F 衷心祝愿大家不再重蹈覆辙。

题目描述

给定一个 N 个点,M 条有向边的带非负权图,请你计算从 S 出发,到每个点的距离。

数据保证你能从 S 出发到任意点。

输入输出格式

输入格式:

第一行为三个正整数 N,M,S。 第二行起 M 行,每行三个非负整数 ui,vi,wi,表示从 ui​ 到 vi 有一条权值为 wi的边。

输出格式:

输出一行 N 个空格分隔的非负整数,表示 S 到每个点的距离。

输入输出样例

输入样例#1: 复制

4 6 1

1 2 2

2 3 2

2 4 1

1 3 5

3 4 3

1 4 4

输出样例#1: 复制

0 2 4 3

说明

样例解释请参考 数据随机的模板题

1≤N≤100000;

1≤M≤200000;

S=1;

1≤ui,vi≤N;

0≤wi≤109,

0≤∑wi≤109。

----------------------------------------------------------------------------

#include<cstdio>
#include<queue>
using namespace std;
int val[],dis[],vis[],head[],nxt[],to[];
int n,m,s,k; struct pot //结构体:x-顶点 dis-最短路径
{
int x,dis;
pot(int _x=,int _dis=):x(_x),dis(_dis){}
friend bool operator < (pot a,pot b)
{
return a.dis>b.dis; //改为大根堆
}
};
priority_queue<pot> que; //定义一个堆 void dijkstra() //定义dijkstra函数 (仅用一步不用递归递推什么的)
{
for(int i=;i<=n;i++) dis[i]=2e9; //初始值使所有点无穷大
que.push(pot(s,)); //s 出发点 自己到自己 距离为 0 同时也是最小值
dis[s]=;
while(!que.empty()) //循环一步 算s到一个点的最短路径
{
pot now;
now=que.top();
que.pop(); //取第一个边 并弹出
if(vis[now.x]) continue;
vis[now.x]=true; //标记已经访问过了
for(int i=head[now.x];i;i=nxt[i])
{
if(dis[to[i]]>dis[now.x]+val[i])
{
dis[to[i]]=dis[now.x]+val[i]; //更新最小值
que.push(pot(to[i],dis[to[i]])); //把新的压入堆中
}
}
}
} void add(int a,int b,int c) //一波加边的操作
{
k++; //给新加入的边编号
nxt[k]=head[a]; //新增的这条边k 紧挨着的是 之前a出发的第一条边(相当于把k边加到最上面)
to[k]=b; //k 这条边指向的点
val[k]=c; //边权值
head[a]=k; //head 从a点出发的第一条边
} int main()
{
int a,b,c;
scanf("%d%d%d",&n,&m,&s);
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
add(a,b,c); //加边
}
dijkstra();
for(int i=;i<=n;i++) printf("%d ",dis[i]);
return ;
}

dijkstra P4779 【模板】单源最短路径(标准版) 洛谷luogu的更多相关文章

  1. Til the Cows Come Home(poj 2387 Dijkstra算法(单源最短路径))

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32824   Accepted: 11098 Description Bes ...

  2. 【转】Dijkstra算法(单源最短路径)

    原文:http://www.cnblogs.com/dolphin0520/archive/2011/08/26/2155202.html 单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路 ...

  3. Dijkstra算法解决单源最短路径

    单源最短路径问题:给定一个带权有向图 G = (V, E), 其中每条边的权是一个实数.另外,还给定 V 中的一个顶点,称为源.现在要计算从源到其他所有各顶点的最短路径长度.这里的长度是指路上各边权之 ...

  4. 【算法】Dijkstra算法(单源最短路径问题)(路径还原) 邻接矩阵和邻接表实现

    Dijkstra算法可使用的前提:不存在负圈. 负圈:负圈又称负环,就是说一个全部由负权的边组成的环,这样的话不存在最短路,因为每在环中转一圈路径总长就会边小. 算法描述: 1.找到最短距离已确定的顶 ...

  5. Dijkstra算法详细(单源最短路径算法)

    介绍 对于dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解bfs和dfs,而对dijkstra和floyd算法可能知道大概是图论中的某个算法,但是可能不清楚其中的作用和原理,又或 ...

  6. [模板]单源最短路径(Dijkstra)

    如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 主要还是再打一遍最短路,这种算法我用的不多... #include<bits/stdc++.h> using namesp ...

  7. Dijkstra算法求单源最短路径

    Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店 ...

  8. SPFA算法与dijkstra算法求单源最短路径的比较

    SPFA是运用队列,把所有的点遍历到没有能更新的,点可以重复入队 如题http://www.cnblogs.com/Annetree/p/5682306.html dijkstra是每次找出离源点最近 ...

  9. 【洛谷 p3371】模板-单源最短路径(图论)

    题目:给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 解法:spfa算法. 1 #include<cstdio> 2 #include<cstdlib> 3 #in ...

  10. 单源最短路径问题之dijkstra算法

    欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. 算法的原理 以源点开始,以源点相连的顶点作为向外延伸的顶点,在所有这些向外延伸的顶 ...

随机推荐

  1. JavaScript中的window对象的属性和方法;JavaScript中如何选取文档元素

    一.window对象的属性和方法 ①setTimeout()方法用来实现一个函数在指定毫秒之后运行,该方法返回一个值,这个值可以传递给clearTimeout()用于取消这个函数的执行. ②setIn ...

  2. Python3选择支持非ASCII码标识符的缘由

    原文在: PEP 3131 -- Supporting Non-ASCII Identifiers. Python2并不支持非ASCII码标识符. PEP的全称是Python Enhancement ...

  3. 对ES6的一次小梳理

    今天闲的没事回顾了ES6的一些知识,下面写的不是特别详细,只是类似于一个大纲,今天我竟然敢睡到八点起床了,md,我膨胀了,赶紧写篇博客压压惊 下面来看看ES6给我们提供了哪些新东西 (1)新的变量声明 ...

  4. 【代码笔记】Web-JavaScript-JavaScript注释

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  5. CMake笔记(一)

    CMake,比makefile更方便,虽然手写makefile同样重要 CMake的所有命令均出现在CMakeList.txt中,注意名字不要写错,并置于源代码目录中 # CMake 最低版本号要求 ...

  6. loadrunner 场景设计-设计与实践

    场景设计-设计与实践 by:授客 QQ:1033553122 以lr 11.0 自带Web Tours为例,进行以下测试 说明:以下测试仅供演示,学习设计思路 A.确定系统组件 简单B/S架构:Cli ...

  7. 测试中Android与IOS分别关注的点

    主要从本身系统的不同点.系统造成的不同点.和注意的测试点做总结 1.自身不同点 研发商:Adroid是google公司做的手机系统,IOS是苹果公司做的手机系统 开源程度:Android是开源的,IO ...

  8. python第十九天——感冒中

    ConfigParser模块,hashlib模块,hmac模块: 创建配置文件: import configparser config = configparser.ConfigParser()#创建 ...

  9. CSS图片水平垂直居中

    Html: <div id="></img></div> </div> CSS: #MainContent { display:table-c ...

  10. 01LaTeX学习系列之---TeX的介绍与认识

    目录 01TeX的介绍与认识 目录 前言 (一)TeX 的宣传 TeX - Beauty and Fun 1. TeX 是什么? 2. TeX 是哪家公司生产的? 3. 我们今天主角的名字怎么念啊?& ...