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

Heap_dijkstra模板

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

d i j k s t r a dijkstra dijkstra 模板

题目大意:

给定一个 n n n 节点, m m m 条有向边的带非负权图,请计算从 s t st st 出发,到每个节点的最短路径

思路:

定义 d [ i ] d[i] d[i] 表示 i i i 节点到 s t st st 节点的最短路径

找到一个未被标记的, d [ x ] d[x] d[x] 最小的节点 x x x ,标记 x x x ,并用 x x x 更新所有能够到达的节点,直到所有点被标记

//小根堆可以O(logn)直接找到,优化了1-n的遍历
priority_queue<PII,vector<PII>,greater<PII> > q;//初始化最初都无法到达d[i]=1e18,每个点还没有被标记vis[i]=0;
for(int i=1;i<=n;i++) d[i]=1e18,vis[i]=0;//开始时将起点入队
d[st]=0;
q.push({0,st});while(q.size()){int u=堆中最小节点;if(vis[u])//已经确定过就跳过vis[u]=1;//每次确定一个进行更新
}

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define PII pair<int,int>
#define lowbit(x) x&-x
#define ALL(x) x.begin(),x.end()const int mod = 1e9 + 7;
const int N = 2e5 + 10;int n,m,st;
vector<PII> g[N];
int d[N],vis[N];void dij(){priority_queue<PII,vector<PII>,greater<PII> > q;for(int i=1;i<=n;i++) {d[i]=1e18;vis[i]=0;}d[st]=0;q.push({0,st});//{dist,node}while(q.size()) {auto x=q.top();q.pop();int dt=x.fi,u=x.se;if(vis[u]) continue;vis[u]=1; for(auto v:g[u]) {int dis=dt+v.se;int j=v.fi;if(dis<d[j]){d[j]=dis;q.push({d[j],j});}}}
}void solve() {cin>>n>>m>>st;for(int i=1,u,v,x;i<=m;i++){cin>>u>>v>>x;g[u].push_back({v,x});
//		g[v].push_back({u,x});}dij();for(int i=1;i<=n;i++){cout<<d[i]<<" ";}
}signed main() {std::ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int T = 1;
//	cin >> T;while (T--) {solve();}return 0;
}

http://www.mrgr.cn/news/97682.html

相关文章:

  • K8S核心技术点
  • 物联网外设管理服务平台
  • 【KWDB 创作者计划】_ruby基础语法
  • 大模型是如何把向量解码成文字输出的
  • 畅游Diffusion数字人(21):基于Wan2.1的音频驱动数字人FantasyTalking
  • 急速实现Anaconda/Miniforge虚拟环境的克隆和迁移
  • mysql镜像创建docker容器,及其可能遇到的问题
  • 数据结构和算法(十二)--最小生成树
  • 【组件封装-优化】vue+element plus:二次封装select组件,实现下拉列表有分页、自定义是否可搜索的一系列功能
  • 【杂谈】Godot4.4导出到Android平台(正式导出)
  • 最新版PhpStorm超详细图文安装教程,带补丁包(2025最新版保姆级教程)
  • c语言 文件操作
  • SQL语法进阶篇(二),数据库复杂查询——窗口函数
  • 【蓝桥杯2024省B】好数 三种解法全解析 | C/C++暴力法→剪枝优化→构造法演进
  • GZ036区块链卷一 EtherStore合约漏洞详解
  • React 列表渲染
  • Java 大视界 -- 基于 Java 的大数据分布式缓存技术在电商高并发场景下的性能优化(181)
  • 算法精讲【整数二分】(实战教学)
  • Kotlin学习
  • debian12安装mysql5.7.42(deb)