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

Heap_dijkstra

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

题目大意:

给定一个 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.dtcms.com/a/119778.html

相关文章:

  • SnakeMake搭建pipeline 1
  • 隔行换色总结
  • MCP vs LangChain:标准化协议与开发框架的优劣对比
  • 1. openharmony 南向开发之工具安装
  • Apple ID授权登入
  • C++中数组的概念
  • Docker Swarm集群搭建与管理全攻略
  • 7.3 在通知中显示图片或视频(UNNotificationAttachment)
  • LPDDR4内存颗粒命名规则全解析:三星、镁光、海力士、南亚、长鑫等厂商型号解码与选型指南
  • 搜广推校招面经七十
  • 蓝桥王国(Dijkstra优先队列)
  • 实战 | 基于 SpringBoot + MyBatis-Plus + UniApp 构建无人棋牌室管理系统:架构解析与性能优化
  • 【AI工具】FastGPT:开启高效智能问答新征程
  • 每日一题(小白)暴力娱乐篇19
  • Unity遮挡剔除与视锥剔除混合策略技术详解
  • 遍历算法及其应用详解
  • 【MQTT】
  • RVOS-1.环境搭建与系统引导
  • 《当区块链穿上防弹衣:落盘加密技术全景拆解》
  • 如何在服务器里部署辅助域
  • 数据结构|排序算法(二)插入排序 希尔排序
  • 可执行程序是如何诞生的(一)——概览
  • opencv(C++)操作图像像素
  • 【NLP 面经 8】
  • pycharm连接autodl训练遇到绝对路径问题
  • 如何应对客户频繁变更需求
  • CMake使用
  • 李贵永任香港共工新闻社副社长
  • /sys/fs/cgroup/memory/memory.stat 关键指标说明
  • 山东大学离散数学第八章习题解析