题目描述

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

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

输入格式

第一行为三个正整数$n,m,s$。 第二行起$m$行,每行三个非负整数 $u_i, v_i, w_i​$,表示从$u_i​$到$v_i$有一条权值为$w_i$的有向边。

输出格式

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

输入输出样例

输入

4 6 1
1 2 2
2 3 2
2 4 1
1 3 5
3 4 3
1 4 4

输出

0 2 4 3

样例解释

由$1\rightarrow 1$,距离为$0$,由$1\rightarrow 2$,距离为$2$,由$1\rightarrow 3$,距离最小等于$1\rightarrow 2\rightarrow 3 = 4$,由$1\rightarrow 4$,距离最小等于$1\rightarrow 2\rightarrow 4 = 3$

分析

模板题,裸$Dijkstra$即可

代码

#include <bits/stdc++.h>

#define Enter puts("")
#define Space putchar(' ') using namespace std; typedef long long ll;
typedef double Db; inline ll Read()
{
ll Ans = 0;
char Ch = getchar() , Las = ' ';
while(!isdigit(Ch))
{
Las = Ch;
Ch = getchar();
}
while(isdigit(Ch))
{
Ans = (Ans << 3) + (Ans << 1) + Ch - '0';
Ch = getchar();
}
if(Las == '-')
Ans = -Ans;
return Ans;
} inline void Write(ll x)
{
if(x < 0)
{
x = -x;
putchar('-');
}
if(x >= 10)
Write(x / 10);
putchar(x % 10 + '0');
} const int MAXN = 100010 , MAXM = 500010; struct Edge
{
int To , Dis , Next;
}; Edge E[MAXM];
int Head[MAXN] , Dis[MAXN] , Count;
bool Visit[MAXN];
int n , m , s; inline void Add_Edge(int u , int v , int d)
{
E[++Count].Dis = d;
E[Count].To = v;
E[Count].Next = Head[u];
Head[u] = Count;
} struct Node
{
int Dis;
int Position;
bool operator < (const Node &x)const
{
return x.Dis < Dis;
}
}; priority_queue <Node> Q; inline void Dijkstra()
{
Dis[s] = 0;
Q.push((Node) {0 , s});
while(!Q.empty())
{
Node Temp = Q.top();
Q.pop();
int x = Temp.Position , d = Temp.Dis;
if(Visit[x])
continue;
Visit[x] = 1;
for(int i = Head[x]; i; i = E[i].Next)
{
int y = E[i].To;
if(Dis[y] > Dis[x] + E[i].Dis)
{
Dis[y] = Dis[x] + E[i].Dis;
if(!Visit[y])
Q.push((Node) {Dis[y] , y});
}
}
}
} int main()
{
n = Read();
m = Read();
s = Read();
for(int i = 1; i <= n; i++)
Dis[i] = 0x7fffffff;
for(int i = 0; i < m; i++)
{
int u , v , d;
u = Read();
v = Read();
d = Read();
Add_Edge(u , v , d);
}
Dijkstra();
for(int i = 1; i <= n; i++)
Write(Dis[i]) , Space;
return 0;
}

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

  1. 拼图游戏源码-swift版项目源码

    作者fanyinan,源码PuzzleProject,公司的项目中需要一个拼图游戏,之前有手动拼图和随机打乱的功能,近期又由于个(xian)人(zhe)爱(dan)好(teng)自己加入了自动拼图功能 ...

  2. 单源最短路径Dijkstra算法,多源最短路径Floyd算法

    1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...

  3. SPFA解决单源最短路径

    SPFA(Shortest Path Faster Algorithm): 一:基本算法 在求解单源最短路径的时候,最经典的是 Dijkstra 算法,但是这个算法对于含有负权的图就无能为力了,而 B ...

  4. Johnson 全源最短路径算法

    解决单源最短路径问题(Single Source Shortest Paths Problem)的算法包括: Dijkstra 单源最短路径算法:时间复杂度为 O(E + VlogV),要求权值非负: ...

  5. Floyd-Warshall 全源最短路径算法

    Floyd-Warshall 算法采用动态规划方案来解决在一个有向图 G = (V, E) 上每对顶点间的最短路径问题,即全源最短路径问题(All-Pairs Shortest Paths Probl ...

  6. 多源最短路径算法—Floyd算法

    前言 在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Floyd算法也是非常经典,然而两种算法还是有区别的,Floyd主要计算多源最短路径. 在单源正权值最短路径,我们会用Dijkstra ...

  7. 多源最短路径,一文搞懂Floyd算法

    前言 在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Floyd算法也是非常经典,然而两种算法还是有区别的,Floyd主要计算多源最短路径. 在单源正权值最短路径,我们会用Dijkstra ...

  8. P4779 【模板】单源最短路径(标准版)

    P4779 [模板]单源最短路径(标准版) 求单源最短路, 输出距离 Solution \(nlogn\) 堆优化 \(Djs\) Code #include<iostream> #inc ...

  9. 洛谷 P4779【模板】单源最短路径(标准版)

    洛谷 P4779[模板]单源最短路径(标准版) 题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 10 ...

  10. 洛谷 P4779 【模板】单源最短路径(标准版) 题解

    P4779 [模板]单源最短路径(标准版) 题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 100 ...

随机推荐

  1. php isset()与empty()的使用

    PHP isset函数作用 isset函数是检测变量是否设置. 格式:bool isset( mixed var [, mixed var [, ...]] ) 返回值: 若变量不存在则返回FALSE ...

  2. Day009 面向对象和方法回顾

    面向过程&面向对象 面向过程思想 步骤清晰简单,第一步做什么,第二步做什么..... 面象过程适合处理一些较为简单的问题 面向对象思想 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些 ...

  3. flex布局的使用

    一.Flex布局是什么? Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局. .box{ disp ...

  4. JAVA连接、操作数据库的DBHelper

    工厂模式的DBHelper 1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.Prepa ...

  5. 面试遇到的坑CSS篇 1

    ------------恢复内容开始------------ 1.display: none和 visibility: hidden 代码 <style type="text/css& ...

  6. 透过“锁”事看InnoDB对并发的处理?

    一. 并发场景下的问题 相对于串行处理方式,并发的事务处理可显著提升数据库的事务吞吐量.提高资源利用率.在MySQL实际应用中,根据场景的不同,可以分为以下几类: 读读并发 读写并发 写写并发 在这些 ...

  7. 关于.NET微服务最热门的问题解答

    在我们最近让我们一起学习.NET的微服务专场活动中,我们收到了一些很好的问题.我们在现场已经回答很多问题,但我们想继续回答一些在会议中出现的最热门的问题.如果你错过了现场直播,不要担心,因为你可以按需 ...

  8. [DB] Kafka

    介绍 一种高吞吐量的分布式发布订阅消息系统 消息类型:主体Topic(广播).队列Queue(一对一) 消息系统类型:同步消息系统.异步消息系统 常见消息产品:Redis.Kafka.JMS 术语 P ...

  9. [Linux] Linux命令行与Shell脚本编程大全 Part.2

    进程 Linux是多用户系统,多个用户可以在不同地方通过网络连接到一个Linux系统上进行操作 w:显示登录人员信息 date:显示当前日期.时间和时区 up:从开机登录到现在经过的时间 load a ...

  10. [刷题] 226 Invert Binary Tree

    要求 翻转一棵二叉树 实现 翻转左右子树,交换左右子树的根节点 1 class Solution { 2 public: 3 TreeNode* invertTree(TreeNode* root) ...