洛谷_P3371 【模板】单源最短路径(弱化版)_dijkstra_堆优化
洛谷_P3371 【模板】单源最短路径(弱化版)_dijkstra_堆优化
// dijkstra最短路算法_堆优化
#include<bits/stdc++.h>
using namespace std;
#define ERROR ( (1LL<<31)-1 ) // 1LL ( (int)1 溢出 ) const int INF=0x3f3f3f3f;
const int N=2e6+7;
int h[N],pos;
struct edge{ int y,data,next; }e[N];
int n,m,start;
// h[i]: 存放结点i的第一个邻接点在边表e[i]中的下标
// pos: 边表下标推进器
// e[]: 边表 int dis[N]; // start到其他所有点的最短路径
bool used[N]; // 标记顶点是否被当成中间点使用过 used[i]=1:表示顶点i被使用过void init() // 初始化函数
{pos=0;memset( h,-1,sizeof( h ) );memset( dis,0x3f,sizeof( dis ) );memset( used,0,sizeof( used ) );
}// e[++pos]=edge( y,data,h[x] ); 这句话没法实现存边
void add( int x,int y,int data ) // 存边
{e[pos].y=y;e[pos].data=data;e[pos].next=h[x];h[x]=pos++;
}struct node
{int id,dis; // 结构体的构造函数 用于结构体的初始化node( int a,int b ):id(a),dis(b) {}bool operator < ( const node& x ) const {return x.dis<dis; // (2)<(1) 表示从小到大排列 放入优先队列当中相当于小堆顶} // 注意和 sort 区分开来, (1)<(2) 才表示从小到大排列
};void dijkstra()
{dis[start]=0;priority_queue<node> q;int x,y,data,i;q.push( node( start,0 ) );while( !q.empty() ){x=q.top().id; q.pop(); // 获取优先队列(小堆顶)的堆顶元素 获取的顶点是距离起点start最近的点if( used[x] ) continue; // 使用过就返回used[x]=1; // 标记 下面将使用x作为中间顶点更新最短路径dis[]for( i=h[x];~i;i=e[i].next ){y=e[i].y; // 获取顶点 x 的邻接点data=e[i].data; // 获取边(x,y) 的权值if( dis[y]>dis[x]+data ) // 如果可以更新 记得加入小堆顶{dis[y]=dis[x]+data;q.push( node( y,dis[y] ) );}}}
}int main()
{int x,y,data,i;while( cin>>n>>m>>start ){init(); // 初始化while( m-- ){cin>>x>>y>>data;add( x,y,data ); // 有向图// add( y,x,data ); 无向图请加上这句代码}dijkstra();for( i=1;i<=n;i++ ){if( i!=1 ) cout<<" ";if( dis[i]==INF ) cout<<ERROR;else cout<<dis[i];}cout<<endl;}return 0;
}
洛谷_P3371 【模板】单源最短路径(弱化版)_dijkstra_堆优化相关推荐
- p3371 单源最短路径(弱化版)-java题解-最短路
弱化版传送门: P3371 [模板]单源最短路径(弱化版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通 ...
- p4779 单源最短路径(标准版)-java版
传送门: P4779 [模板]单源最短路径(标准版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P4779 先给 ...
- 题解 P4779 【【模板】单源最短路径(标准版)】
既然卡SPFA,那就用Dijkstra + 堆优化 我太菜了就不会SPFA 就是要注意,可能有些同学会说: "我们又不是不会Dijkstra + 堆优化" 于是自信满满的交上,一看 ...
- 洛谷 P3371 【模板】单源最短路径(弱化版)【最短路】【spfa】
洛谷 P3371 [模板]单源最短路径(弱化版) 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 洛谷 P3371 [模板]单源最短路径(弱化版) ...
- 最短路——【模板】单源最短路径(弱化版)(dijkstra)
题目链接 最短路--[模板]单源最短路径(弱化版)(dijkstra) 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入格式 第一行包含三个整数 n,m,s,分别表示点 ...
- P3371 【模板】单源最短路径(弱化版)
题目 P3371 [模板]单源最短路径(弱化版) 分析 Dijkstra模板题,只不过这里用了链式前向星 AC代码 #include<cstdio> #include<iostrea ...
- Luogu 3371【模板】单源最短路径
Luogu 3371[模板]单源最短路径 第一次写博客用图论题来试一试 接下来是正文部分 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包 ...
- P4779 【模板】单源最短路径(标准版)
# [模板]单源最短路径(标准版) ## 题目背景 2018 年 7 月 19 日,某位同学在 [NOI Day 1 T1 归程](https://www.luogu.org/problemnew/s ...
- Dijkstra算法求解单源最短路径问题
文章目录 一 前言 二 Dijkstra 算法讲解 1. 贪心算法的证明 2. 算法实现说明 3. 初版Dijkstra算法代码 三 时间复杂度优化 1. 优化策略 2. 优化后的代码 四 结语 一 ...
最新文章
- oracle日期导出mysql_oracle的数据导入到mysql中,遇到一个时间转换问题
- ruby1.8.6 安装watir是出现问题记录
- EJB(四)JPA 分布式事务处理
- TabHost刷新activity的方法
- 使用mcBackup备份Windows 7 Media Center设置
- 二元函数泰勒公式例题_高等数学期末总复习 DAY 5. 罗尔定理证明题 拉格朗日、柯西中值定理 泰勒公式及麦克劳林公式...
- linux shell下除了某个文件外的其他文件全部删除的命令
- PAT 乙级 1011. A+B和C (15) Java版
- oracle中的符号含义
- (转)SegWit 与 Lightning Network
- 在SPSS中使用广义估算方程对非独立相关数据进行分析的方法
- 135 、137、139端口等主要用途
- 苹果vs剪辑下载_适合mac的视频剪辑软件
- window10_vs2015安装教程
- oppoa3android怎么升级,OPPO A3刷机教程_OPPO A3卡刷升级更新官方系统包
- 51单片机智能小车——超声波
- 大数据挖掘步骤都包括哪些?
- 新一代天气雷达文件三维可视化
- php 微信表情存储,轻松处理PHP开发中微信emoji表情mysql存储的问题
- java方法怎么用?【java方法使用教程】
热门文章
- 电脑连接电视画面超出屏幕
- 长三角是指哪几个城市
- 食品行业质量追溯系统的建设(一)
- delphi百度语音(支持语音识别和语音合成),D7~XE10可用
- 心灵鸡汤----幸福来敲门
- [导入][美国][剧情][廊桥遗梦][DVD-RMVB/459M][国语][经典奥斯卡大片]
- Nand Flash调试日志(6)——时钟配置
- Microsoft Edge 内置小游戏的彩蛋
- 博物馆里有2493台旧手机:你最怀念的是哪一台?
- 2017中国西部国际制冷空调供热通风及食品冷冻加工展览会(西部制冷展)会刊(参展商名录)