洛谷_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_堆优化相关推荐

  1. p3371 单源最短路径(弱化版)-java题解-最短路

    弱化版传送门: P3371 [模板]单源最短路径(弱化版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通 ...

  2. p4779 单源最短路径(标准版)-java版

    传送门: P4779 [模板]单源最短路径(标准版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P4779 先给 ...

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

    既然卡SPFA,那就用Dijkstra + 堆优化 我太菜了就不会SPFA 就是要注意,可能有些同学会说: "我们又不是不会Dijkstra + 堆优化" 于是自信满满的交上,一看 ...

  4. 洛谷 P3371 【模板】单源最短路径(弱化版)【最短路】【spfa】

    洛谷 P3371 [模板]单源最短路径(弱化版) 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 洛谷 P3371 [模板]单源最短路径(弱化版) ...

  5. 最短路——【模板】单源最短路径(弱化版)(dijkstra)

    题目链接 最短路--[模板]单源最短路径(弱化版)(dijkstra) 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入格式 第一行包含三个整数 n,m,s,分别表示点 ...

  6. P3371 【模板】单源最短路径(弱化版)

    题目 P3371 [模板]单源最短路径(弱化版) 分析 Dijkstra模板题,只不过这里用了链式前向星 AC代码 #include<cstdio> #include<iostrea ...

  7. Luogu 3371【模板】单源最短路径

    Luogu 3371[模板]单源最短路径 第一次写博客用图论题来试一试 接下来是正文部分 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包 ...

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

    # [模板]单源最短路径(标准版) ## 题目背景 2018 年 7 月 19 日,某位同学在 [NOI Day 1 T1 归程](https://www.luogu.org/problemnew/s ...

  9. Dijkstra算法求解单源最短路径问题

    文章目录 一 前言 二 Dijkstra 算法讲解 1. 贪心算法的证明 2. 算法实现说明 3. 初版Dijkstra算法代码 三 时间复杂度优化 1. 优化策略 2. 优化后的代码 四 结语 一 ...

最新文章

  1. oracle日期导出mysql_oracle的数据导入到mysql中,遇到一个时间转换问题
  2. ruby1.8.6 安装watir是出现问题记录
  3. EJB(四)JPA 分布式事务处理
  4. TabHost刷新activity的方法
  5. 使用mcBackup备份Windows 7 Media Center设置
  6. 二元函数泰勒公式例题_高等数学期末总复习 DAY 5. 罗尔定理证明题 拉格朗日、柯西中值定理 泰勒公式及麦克劳林公式...
  7. linux shell下除了某个文件外的其他文件全部删除的命令
  8. PAT 乙级 1011. A+B和C (15) Java版
  9. oracle中的符号含义
  10. (转)SegWit 与 Lightning Network
  11. 在SPSS中使用广义估算方程对非独立相关数据进行分析的方法
  12. 135 、137、139端口等主要用途
  13. 苹果vs剪辑下载_适合mac的视频剪辑软件
  14. window10_vs2015安装教程
  15. oppoa3android怎么升级,OPPO A3刷机教程_OPPO A3卡刷升级更新官方系统包
  16. 51单片机智能小车——超声波
  17. 大数据挖掘步骤都包括哪些?
  18. 新一代天气雷达文件三维可视化
  19. php 微信表情存储,轻松处理PHP开发中微信emoji表情mysql存储的问题
  20. java方法怎么用?【java方法使用教程】

热门文章

  1. 电脑连接电视画面超出屏幕
  2. 长三角是指哪几个城市
  3. 食品行业质量追溯系统的建设(一)
  4. delphi百度语音(支持语音识别和语音合成),D7~XE10可用
  5. 心灵鸡汤----幸福来敲门
  6. [导入][美国][剧情][廊桥遗梦][DVD-RMVB/459M][国语][经典奥斯卡大片]
  7. Nand Flash调试日志(6)——时钟配置
  8. Microsoft Edge 内置小游戏的彩蛋
  9. 博物馆里有2493台旧手机:你最怀念的是哪一台?
  10. 2017中国西部国际制冷空调供热通风及食品冷冻加工展览会(西部制冷展)会刊(参展商名录)