当前位置: 首页 > news >正文

堆优化版dijkstra算法

堆优化的dijkstra算法用于稀疏图,也就是m~n级别的图,算法时间复杂度O(mlog(n))

vis数组的用处:堆优化是按照距离来进行排序,可能会出现距离已经被优化的点,和原先没被优化的距离同时进入了堆,也就是堆内的元素数实际上不等于顶点数,而是边数,vis就是为了处理上述可能被重复更新的点

#pragma optimize(2)
#include<bits/stdc++.h>
#include<unordered_map>
#define endl '\n'
#define int int64_t
using namespace std;
const int  N = 1e5 + 10;
struct edge { int v, w; };
vector<edge>e[N];
int d[N],vis[N],m,n,s;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>>q;
void dijkstra(int s) {
    for (int i = 0; i <= n; ++i) d[i] = INT_MAX;
    d[s] = 0; q.push({ 0,s });
    while (q.size()) {
         int u = q.top().second; q.pop();
         if (vis[u]) continue;
         vis[u] = 1;
         for (auto k : e[u]) {
             if (d[k.v] > d[u] + k.w) {
                   d[k.v] = d[u] + k.w;
                   q.push({ d[k.v],k.v });
               }
         }
    }
}
signed main() {
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    cin >> n >> m >> s;
    for (int i = 1; i <= m; ++i) {
         int a, b, c; cin >> a >> b >> c;
         e[a].push_back({ b,c });
    }
    dijkstra(s);
    for (int i = 1; i <= n; ++i) cout << d[i] << " ";
    return 0;
}

http://www.dtcms.com/a/3395.html

相关文章:

  • Nignx及负载均衡动静分离
  • golang中快速用melody搭建轻量的websocket服务
  • 【计算机网络笔记】传输层——可靠数据传输之流水线机制与滑动窗口协议
  • Linux学习第28天:Platform设备驱动开发(二): 专注与分散
  • 【数据结构】树形结构所有路径复原为链表
  • AR眼镜定制开发-智能眼镜的主板硬件、软件
  • 如何确认目标期刊被SCI或EI收录?
  • vue element el-table-column 循环示例代码
  • 如何将 ruby 打包类似于jdk在另一台相同架构的机器上面开箱即用
  • API商品数据接口调用
  • 【广州华锐互动】飞机诊断AR远程指导系统为工程师提供更多支持
  • 3D数据过滤为2D数据集并渲染
  • LeetCode|动态规划|1035. 不相交的线 、53. 最大子数组和
  • 【智能座舱系列】- 深度解密小米Hyper OS,华为HarmonyOS区别
  • 前端CSS
  • 数据结构学习笔记——链式表示中的双链表及循环单/双链表
  • 第19期 | GPTSecurity周报
  • 【计算机视觉】3D视觉
  • kkfileview安装部署Linux(CentOS、Debian)
  • 中文编程工具免费版下载,中文开发语言工具免费版下载
  • Python自动化运维监控——批量监听页面发邮件(自由配置ini文件+smtplib)
  • STM32 APP跳转到Bootloader
  • 天线测试解决方案-毫米波片上天线测量系统
  • Http代理与socks5代理有何区别?如何选择?(一)
  • 基于知识库的chatbot或者FAQ
  • 【ELFK】之Filebeat
  • 在虚拟机centos7中部署docker+jenkins最新稳定版
  • 如何保证分布式情况下的幂等性
  • HTML列表
  • 【Cargo Therapeutics】申请1亿美元纳斯达克IPO上市