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

题目链接

https://www.luogu.org/problemnew/show/P4779

题目描述

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

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

输入输出格式

输入格式:

第一行为三个正整数 N,M,S。 第二行起 M行,每行三个非负整数 \(u_i, v_i, w_i\)表示从 \(u_i\) 到 \(v_i\)有一条权值为 \(w_i\)的边。

输出格式:

输出一行 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

说明

\(\large1≤N≤100000\)

\(\large1≤M≤200000\)

\(\large S=1\)

\(\large1≤ui,vi≤N\)

$\large0≤wi≤10^9 $

\(\large0≤\sum w_i \leq 10 ^ 9\)

题解

最短路模板题,好久没做图啦,最近一直在做路,竟然存了双向边。。。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100050
#define M 200050
int n,m,dis[N];
int tot,last[N];
struct Edge{int from,to,val,s;}edges[M];
template<typename T>void read(T&x)
{
ll k=0; char c=getchar();
x=0;
while(!isdigit(c)&&c!=EOF)k^=c=='-',c=getchar();
if (c==EOF)exit(0);
while(isdigit(c))x=x*10+c-'0',c=getchar();
x=k?-x:x;
}
void read_char(char &c)
{while(!isalpha(c=getchar())&&c!=EOF);}
void AddEdge(int x,int y,int z)
{
edges[++tot]=Edge{x,y,z,last[x]};
last[x]=tot;
}
void dijkstra(int qd)
{
struct HeapNode
{
int id,val;
bool operator <(const HeapNode&b)const
{return val>b.val;}
};
priority_queue<HeapNode>Q;
memset(dis,127,sizeof(dis));
dis[qd]=0;
Q.push(HeapNode{qd,0});
while(!Q.empty())
{
int u=Q.top().id,d=Q.top().val;
Q.pop();
if (d!=dis[u])continue;
for(int i=last[u];i;i=edges[i].s)
{
Edge &e=edges[i];
if (dis[e.to]-dis[u]>e.val)
{
dis[e.to]=dis[u]+e.val;
Q.push(HeapNode{e.to,dis[e.to]});
}
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("aa.in","r",stdin);
#endif
int qd;
read(n); read(m); read(qd);
for(int i=1;i<=m;i++)
{
int x,y,z;
read(x); read(y); read(z);
AddEdge(x,y,z);
}
dijkstra(qd);
for(int i=1;i<=n;i++)printf("%d ",dis[i]);
}

洛谷P4779 【模板】单源最短路径的更多相关文章

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

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

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

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

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

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

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

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

  5. 洛谷 P3371 【模板】单源最短路径(弱化版) 题解

    P3371 [模板]单源最短路径(弱化版) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779. 题目描述 如题,给出一个有向图,请输出从某一点出 ...

  6. 洛谷P3371 【模板】单源最短路径

    P3371 [模板]单源最短路径 282通过 1.1K提交 题目提供者HansBug 标签 难度普及/提高- 提交  讨论  题解 最新讨论 不萌也是新,老司机求带 求看,spfa跑模板40分 为什么 ...

  7. 洛谷 P3371 【模板】单源最短路径

    P3371 [模板]单源最短路径 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出 ...

  8. 【原创】洛谷 LUOGU P3371 【模板】单源最短路径

    P3371 [模板]单源最短路径 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出 ...

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

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

随机推荐

  1. Grafana +Zabbix 系列二

    Grafana +Zabbix 系列二 Grafana 简介补充 Grafana自身并不存储数据,数据从其他地方获取.需要配置数据源 Grafana支持从Zabbix中获取数据 Grafana优化图形 ...

  2. vscode设置VUE eslint开发环境

    我的使用vscode开发VUE的常用设置 1.安装插件 ESLint Vetur Beautify Prettier - Code formatter Auto Rename Tag -重命名标签,闭 ...

  3. TCP SACK 介绍 转载

    一.SACK选项 默认情况下TCP采取的是累积确认机制,这时如果发生了报文乱序到达,接收方只会重复确认最后一个按序到达的报文段,为此发送方的处理只能是重复按序到达接收方的报文段之后的那个报文段,因而它 ...

  4. CF1200B

    CF1200B 解法: 贪心.当在第i列时,尽可能多的取走第i列的木块使得袋子里的木块尽可能多 CODE: #include<iostream> #include<cstdio> ...

  5. pwn学习日记Day9 基础知识积累

    知识杂项 libc是Linux下的ANSI C的函数库. LOOKUP函数 数组形式:公式为= LOOKUP(lookup_value,array) 式中 array-包含文本.数字或逻辑值的单元格区 ...

  6. SQL-W3School-高级:SQL ALTER TABLE 语句

    ylbtech-SQL-W3School-高级:SQL ALTER TABLE 语句 1.返回顶部 1. ALTER TABLE 语句 ALTER TABLE 语句用于在已有的表中添加.修改或删除列. ...

  7. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_07-vuejs研究-vuejs基础-v-bind指令

    4.v-bind v-bind:无法双向绑定’ 1.作用: v‐bind可以将数据对象绑定在dom的任意属性中. v‐bind可以给dom对象绑定一个或多个特性,例如动态绑定style和class 2 ...

  8. Docker 实践备忘录

    平时零散的接触docker,时间久了概念和命令都会忘了,所以集中记下: docker 目标是实现轻量级的操作系统虚拟化解决方案. Docker 的基础是 Linux 容器(LXC)等技术 docker ...

  9. Clonezilla克隆还原系统

    简介 Clonezilla是一个专门用来克隆磁盘驱动器的Linux发行版.它可以操作任何你所能想象到的文件系统类型.Clonezilla有两种版本:Live和SE.Live版本与Ubuntu的Live ...

  10. DOTS默认情况下的性能

    利用Unity全新的高性能多线程数据导向技术堆栈(DOTS),充分利用当今的多核处理器.您的游戏运行速度更快,您的代码更易于在其他项目中阅读和重用. 重建Unity的核心 我们正在使用高性能多线程数据 ...