洛谷 P4779 【模板】单源最短路径(标准版) 题解
P4779 【模板】单源最短路径(标准版)
题目背景
2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路。
然后呢?
100 \rightarrow 60100→60;
Ag \rightarrow CuAg→Cu;
最终,他因此没能与理想的大学达成契约。
小 F 衷心祝愿大家不再重蹈覆辙。
题目描述
给定一个 NN 个点,MM 条有向边的带非负权图,请你计算从 SS 出发,到每个点的距离。
数据保证你能从 SS 出发到任意点。
输入格式
第一行为三个正整数 N, M, SN,M,S。 第二行起 MM 行,每行三个非负整数 u_i, v_i, w_iui,vi,wi,表示从 u_iui 到 v_ivi 有一条权值为 w_iwi 的边。
输出格式
输出一行 NN 个空格分隔的非负整数,表示 SS 到每个点的距离。
输入输出样例
输入 #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 \leq N \leq 1000001≤N≤100000;
1 \leq M \leq 2000001≤M≤200000;
S = 1S=1;
1 \leq u_i, v_i\leq N1≤ui,vi≤N;
0 \leq w_i \leq 10 ^ 90≤wi≤109,
0 \leq \sum w_i \leq 10 ^ 90≤∑wi≤109。
本题数据可能会持续更新,但不会重测,望周知。
2018.09.04 数据更新 from @zzq
【完整代码】
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
struct point
{
int w;//路径的长度
int x;//点的标号
bool operator < (const point & xx)const//重载运算符
{
return xx.w < w;
}
};
priority_queue<point>q;//保证每次都拿最小的路径来更新
const int Max = 400005;
struct node
{
int y,z;
int ne;
}a[Max];
int sum = 0;
int n,m,s;
int head[Max >> 2];
void add(int x,int y,int z)//插入邻接矩阵
{
a[++ sum].y = y;
a[sum].ne = head[x];
a[sum].z = z;
head[x] = sum;
}
int dis[Max >> 2];
bool use[Max >> 2];
void dj()
{
dis[s] = 0;//自己到自己的距离为0
q.push((point){0,s});
while(!q.empty())
{
point qwq = q.top();
q.pop();
int x = qwq.x,w = qwq.w;
if(use[x] == true)//没个点只能用来更新一次
continue;//不放进去也没有办法更新
else
use[x] = true;
for(register int i = head[x];i != 0;i = a[i].ne)
{
int awa = a[i].y;
if(dis[awa] > dis[x] + a[i].z)//松弛操作
{
dis[awa] = dis[x] + a[i].z;//更新
if(use[awa] == false)//没有入队
q.push((point){dis[awa],awa});//入队
}
}
}
}
int main()
{
int x,y,z;
scanf("%d%d%d",&n,&m,&s);
for(register int i = 1;i <= n;++ i)
dis[i] = 0x7fffffff;//赋值一个极大数
for(register int i = 1;i <= m;++ i)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
}
dj();
for(register int i = 1;i <= n;++ i)
cout << dis[i] << " ";
return 0;
}
洛谷 P4779 【模板】单源最短路径(标准版) 题解的更多相关文章
- 【洛谷 p3371】模板-单源最短路径(图论)
题目:给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 解法:spfa算法. 1 #include<cstdio> 2 #include<cstdlib> 3 #in ...
- 洛谷P3371单源最短路径Dijkstra版(链式前向星处理)
首先讲解一下链式前向星是什么.简单的来说就是用一个数组(用结构体来表示多个量)来存一张图,每一条边的出结点的编号都指向这条边同一出结点的另一个编号(怎么这么的绕) 如下面的程序就是存链式前向星.(不用 ...
- [模板]单源最短路径(Dijkstra)
如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 主要还是再打一遍最短路,这种算法我用的不多... #include<bits/stdc++.h> using namesp ...
- 洛谷 P4779【模板】单源最短路径(标准版)
洛谷 P4779[模板]单源最短路径(标准版) 题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 10 ...
- 洛谷P4779 【模板】单源最短路径
P4779 [模板]单源最短路径(标准版) 题目链接 https://www.luogu.org/problemnew/show/P4779 题目描述 给定一个 N个点,M条有向边的带非负权图,请你计 ...
- P4779 【模板】单源最短路径(标准版)
P4779 [模板]单源最短路径(标准版) 求单源最短路, 输出距离 Solution \(nlogn\) 堆优化 \(Djs\) Code #include<iostream> #inc ...
- 洛谷 P3371 【模板】单源最短路径(弱化版) 题解
P3371 [模板]单源最短路径(弱化版) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779. 题目描述 如题,给出一个有向图,请输出从某一点出 ...
- 洛谷P3371 【模板】单源最短路径
P3371 [模板]单源最短路径 282通过 1.1K提交 题目提供者HansBug 标签 难度普及/提高- 提交 讨论 题解 最新讨论 不萌也是新,老司机求带 求看,spfa跑模板40分 为什么 ...
- 洛谷 P3371 【模板】单源最短路径
P3371 [模板]单源最短路径 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出 ...
随机推荐
- 使用jconsole分析内存情况
http://www.cnblogs.com/dava/p/6686436.html
- PE系统——安装教程
本教程使用到的软件我会在本文末给出,若失效了请私信我,重新上传. 1.安装PE系统前,把U盘插在电脑上(如果你需要安装Windows10系统,请插入一个容量至少8G的U盘).当然容量最好是32—64G ...
- 【开发工具】- 推荐一款好用的文本编辑器[Sublime Text]
作为一个程序员除了IDE外,文本编辑器也是必不可少的一个开发工具.之前一直在用的是NotePad++.EditPlus,这两款编辑器,但是总感觉差点什么,昨天在知乎上看到有人推荐Sublime Tex ...
- ORACLE表、索引和分区详解
ORACLE表.索引和分区 一.数据库表 每种类型的表都有不同的特性,分别应用与不同的领域 堆组织表 聚簇表(共三种) 索引组织表 嵌套表 临时表 外部表和对象表 1.行迁移 建表过程中可以指定以下两 ...
- 电缆公司如何面对企业改革?MES系统打造智能工厂
项目背景 目前,“互联网+电缆”正在成为电缆行业发展的主流,作为中国领先的大型电缆企业江苏亨通电力电缆有限公司(简称“亨通电缆”)积极响应国家提出的“中国制造2025”号召,实施MES工程项目,启用智 ...
- linux下测试某网址或IP端口能否访问
参考这篇 Linux系统下怎么测试端口的连通性 测试端口连通 nc -v -w 1 183.xx.oo.ee -z 82 1linux主机centos操作系统,项目里面需要访问一个URL路径的接口ht ...
- PDF 补丁丁 0.6.2 测试版发布
如题. 不知不觉,这个软件已经出来十个年头了. 0.6.2 版可能是 PDF 补丁丁的最后一版.它在未来将不再更新.谢谢关注.
- C#-阿里云OSSAPI
Nuget导入包 共用类 using System; using System.Collections.Generic; using System.IO; using System.Linq; usi ...
- centos在线安装ffmpeg
简介: 跨平台解决方案,用于记录,转换和流式传输音频和视频 挂载yum源 https://rpmfusion.org/Configuration RHEL 7 or compatible like C ...
- git指令集合
原网页:https://www.linuxidc.com/Linux/2018-04/151809.htm Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文 ...