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

P4779 【模板】单源最短路径(标准版)(dijkstra模板) dijkstra模板 输入: 4 6 1 1 2 2 2 3 2 2 4 1 1 3 5 3 4 3 1 4 4 输出: 0 2 4 3 堆优化版本 #include<bits/stdc++.h> using namespace std; #define debug(x) cout<<"# "<<x<<" "<<endl; typ... 阅读详情
题目链接:点击进入
题目

在这里插入图片描述
在这里插入图片描述

思路

dijkstra

代码(python)
import heapq

# 定义无穷大
INF = float('inf')

# 初始化距离和访问数组
def init(n, s):
    # 初始化所有节点的距离为无穷大
    dis = [INF] * (n + 1)
    # 源节点的距离为 0
    dis[s] = 0
    # 初始化所有节点未被访问
    vis = [False] * (n + 1)
    return dis, vis

# Dijkstra 算法实现
def dijkstra(n, s, graph):
    dis, vis = init(n, s)
    # 优先队列,存储 (距离, 节点)
    pq = [(0, s)]

    while pq:
        # 取出当前距离最小的节点
        dist, now = heapq.heappop(pq)
        # 如果节点已经被访问过,跳过
        if vis[now]:
            continue
        # 标记节点为已访问
        vis[now] = True
        # 遍历当前节点的所有邻接节点
        for to, w in graph[now]:
            # 如果通过当前节点到达邻接节点的距离更短
            if dis[to] > dis[now] + w:
                # 更新邻接节点的距离
                dis[to] = dis[now] + w
                # 将更新后的邻接节点加入优先队列
                heapq.heappush(pq, (dis[to], to))

    return dis

# 主函数
if __name__ == "__main__":
    # 读取节点数、边数和源节点
    n, m, s = map(int, input().split())
    # 初始化图的邻接表
    graph = [[] for _ in range(n + 1)]

    # 读取每条边的信息
    for _ in range(m):
        x, y, w = map(int, input().split())
        # 将边加入邻接表
        graph[x].append((y, w))

    # 调用 Dijkstra 算法求解最短路径
    dis = dijkstra(n, s, graph)

    # 输出每个节点到源节点的最短距离
    for i in range(1, n + 1):
        print(dis[i], end=" ")
代码(vector)
// Problem: P4779 【模板】单源最短路径(标准版)
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P4779
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

//#pragma GCC optimize(3)//O3
//#pragma GCC optimize(2)//O2
#include<iostream>
#include<string>
#include<map>
#include<set>
//#include<unordered_map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<fstream>
#define X first
#define Y second
#define base 233 
#define pb push_back
#define INF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define lowbit(x) x & -x
#define inf 0x3f3f3f3f
//#define int long long
//#define double long double
//#define rep(i,x,y) for(register int i = x; i <= y;++i)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const double pai=acos(-1.0);
const int maxn=1e6+10;
const int mod=1e9+7;
const double eps=1e-9;
const int N=5e3+10;
/*--------------------------------------------*/
inline int read()
{
    int k = 0, f = 1 ;
    char c = getchar() ;
    while(!isdigit(c)){if(c == '-') f = -1 ;c = getchar() ;}
    while(isdigit(c)) k = (k << 1) + (k << 3) + c - 48 ,c = getchar() ;
    return k * f ;
}
/*--------------------------------------------*/

int n,m,s;
int head[maxn],tot,dis[maxn];
bool vis[maxn];
struct node
{
	int to;
	int w;
	int next;
}edge[maxn];

void init()
{
	memset(head,-1,sizeof(head));
	for(int i=0;i<=1e5;i++)
		dis[i]=inf;
	tot=0;
}

void add(int u,int v,int w)
{
	edge[tot].to=v;
	edge[tot].w=w;
	edge[tot].next=head[u];
	head[u]=tot++;
}

void dijkstra()
{
	priority_queue<pii,vector<pii>,greater<pii>>q;
	dis[s]=0;
	q.push({dis[s],s});
	while(q.size())
	{
		int now=q.top().second;
		q.pop();
		if(vis[now]) continue;
		vis[now]=1;
		for(int i=head[now];i!=-1;i=edge[i].next)
		{
			int v=edge[i].to;
			if(dis[v]>dis[now]+edge[i].w)
			{
				dis[v]=dis[now]+edge[i].w;
				q.push({dis[v],v});
			}
		}
	}
}

int main() 
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);cout.tie(0);
	init();
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++)
	{
		int x,y,w;
		cin>>x>>y>>w;
		add(x,y,w);
	}
	dijkstra();
	for(int i=1;i<=n;i++)
		cout<<dis[i]<<' ';
    return 0;
} 

代码(vector)
#include<iostream>
#include<algorithm>
#include<map>
#include<cmath>
#include<cstdio>
#include<queue>
#include<cstring> 
#include<vector>
#define inf 0x3f3f3f3f
#define pii pair<int,int>
using namespace std;
typedef long long ll;
const int maxn=1e6+10;

int n,m,s,dis[maxn];
bool vis[maxn];
vector<pii>v[maxn];

void init()
{
	memset(vis,0,sizeof(vis));
	for(int i=0;i<100001;++i) dis[i]=inf;
}
void dijkstra()
{
	priority_queue<pii,vector<pii>,greater<pii>>q;
	dis[s]=0;
	q.push({dis[s],s});
	while(q.size())
	{
		int now=q.top().second;
		q.pop();
		if(vis[now]) continue;
		vis[now]=1;
		for(int i=0;i<v[now].size();++i)
		{
			int to=v[now][i].first;
			int w=v[now][i].second;
			if(dis[to]>dis[now]+w)
			{
				dis[to]=dis[now]+w;
				q.push({dis[to],to});
			}
		}
	} 
}


int main()
{
	init();
//	scanf("%d%d%d",&n,&m,&s);
	cin>>n>>m>>s; 
	for(int i=1;i<=m;++i)
	{
		int x,y,z;
//		scanf("%d%d%d",&x,&y,&z);
		cin>>x>>y>>z; 
		v[x].push_back({y,z});
	}
	dijkstra();
	for(int i=1;i<=n;++i) 
		cout<<dis[i]<<" ";
//		printf("%d ",dis[i]);
	return 0;
}

洛谷P4779 【模板】单源最短路径(标准版)(dijkstra+优先队列-堆优化:时间复杂度o((m+n)logn)) 题目背景 2018 年 7 月 19 日,某位同学在NOI Day 1 T1 归程一题里非常熟练地使用了一个广为人知的算法求最短路。 然后呢? 100 \rightarrow 60100→60; Ag \rightarrow CuAg→Cu; 最终,他因此没能与理想的大学达成契约。 小 F 衷心祝愿大家不再重蹈覆辙。 题目描述 给定一个NN个点,MM条有向边的带非负权图,... 阅读详情

相关推荐

基于STM32与MPU6050的实时姿态检测系统设计与实现(源码+硬件解析)

本文详细介绍了基于STM32单片机与MPU6050传感器的实时姿态检测系统设计与实现。通过硬件解析、传感器校准、卡尔曼滤波算法和欧拉角计算,实现高精度姿态检测。提供完整源码和调试技巧,适用于无人机、平衡车等嵌入式开发项目,解决噪声干扰和数据漂移等常见问题。

jupi8的博客 493

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

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

m0_64045085的博客 873

命令行驱动视频剪辑:cutcli与AI自动化工作流实战

在视频内容创作领域,自动化与批量化处理是提升生产效率的关键。传统图形界面工具在应对重复性任务时往往效率低下,而通过命令行接口(CLI)驱动视频生成,则能实现流程的程序化控制。其技术原理在于将视频结构抽象为可编程的指令序列,通过解析命令生成标准化的工程文件。这种模式的核心价值在于将视频制作从手动操作转变为代码驱动,特别适合与AI编程助手集成,实现自然语言到视频草稿的自动转换。应用场景广泛覆盖社交媒体内容批量生产、教育视频自动化生成、数据可视化视频组装等领域。本文以cutcli工具为例,深入解析如何通过命令行与

weixin_42520239的博客 572

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

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

GordrnGhost的博客 327

Jetson Nano摄像头选型与配置全攻略:CSI与USB接口实战指南

在嵌入式视觉与边缘计算项目中,摄像头作为核心传感器,其选型与配置直接影响系统性能。CSI(Camera Serial Interface)和USB(Universal Serial Bus)是两种主流接口,前者通过MIPI CSI-2协议直接与SoC通信,具备低延迟、高带宽特性,适合实时性要求高的应用;后者基于通用串行总线标准,即插即用,通用性强。在NVIDIA Jetson Nano平台上,合理选择摄像头接口并优化驱动配置,能充分发挥其GPU加速优势,提升图像处理流水线效率。本文聚焦Jetson Nano

weixin_29190651的博客 323

OCTA-500:用于光学相干断层扫描血管造影研究的视网膜数据集|文献速递-基于生成模型的数据增强与疾病监测应用

数据集提供了丰富的图像和注释,包括两种模态(OCT/OCTA体积)、六种投影类型、四种文本标签(年龄/性别/眼别/疾病)以及七种分割标签(大血管/毛细血管/动脉/静脉/2D FAZ/3D FAZ/视网膜层)。我们介绍了新的 OCTA-500 数据集,该数据集包含来自 500 名受试者的 OCTA 成像,并提供了丰富的图像和标注集。(C) OCTA-500 切片的人工标注示例。图 4. OCTA-500 数据集中文本标签的统计直方图:(a) 性别,(b) 眼别,(c) 年龄,(d) 疾病。

weixin_38594676的博客 1435

【图论】单源最短路径(标准版)dijkstra以及堆优化

图存储方式:链式前向星 一, 基础dijkstra 基本思路: 1.定义ans[100000],ans[i]代表到达i点的最小花费 2.定义bool数组visit,代表是否来过这里 2.ans[起点] = 0, 其余的赋值为inf 3.定义一个curr变量,visit[current] = 1(访问过),代表现在的位置,初始值为起点。 4.列举所有与curr相联通的的点,将这些点(i)的ans值更新: ans[i] = min(ans[i], ans[curr] + ans[i] = m

Kokli的博客 506

全能扫描王的实现(python版本)- 目标检测图像矫正

全能扫描王python代码实现,可用于文件扫描或者是图像校正

搬砖猛女的啃书历程 5488

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

第一行为三个正整数 n,m,s。第二行起 m行,每行三个非负整数 ui,vi,wi​,表示从 ui​ 到 vi 有一条权值为 wi 的有向边。给定一个 n 个点,m 条有向边的带非负权图,请你计算从 s 出发,到每个点的距离。1.初始化让{0,s}入队,d[s]=0,d[其他点]=inf;2.从队头弹出距离最小的点u,若u扩展过则跳过,否则打上标记;输出一行 n个空格分隔的非负整数,表示 s到每个点的距离。利用优先队列priority_queue创建小根堆。本题是dijkstra堆优化模版。

2301_79070220的博客 321

【解决问题】‘vue‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

【解决问题】'vue' 不是内部或外部命令,也不是可运行的程序或批处理文件。

weixin_44566194的博客 4万+

SAP S/4HANA 数据归档的实施方法

实施 SAP S/4HANA 数据归档是一个系统的过程,涉及到策略的定义、技术的执行以及后续的维护和验证。正确的归档策略不仅能优化系统性能,还能帮助企业降低运营成本,确保数据安全,并符合相关法律法规的要求。通过以上案例,我们可以看到不同行业如何依据自己的业务需求和法规要求,利用 SAP S/4HANA 的强大功能来实现数据归档的目标。这些实践证明了数据归档在现代企业信息管理中的重要地位和作用。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 890

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

https://www.luogu.com.cn/problem/P4779 思路 手打了一遍与上一题弱化版的一样的,过了,上一题叫弱化估计是能用SPFA,这题不行,SPFA,它死了 #include <bits/stdc++.h> using namespace std; const int N = 100005; const int M = 200005; struct edge { int v; int w; int next; } e[M]; int n, m, s, cnt.

We have to be very hard to reach the top. 341

解决Google Play签名问题:Android App Bundle上传指南

摘要:本文分享了解决Android App Bundle上传至Google Play时遇到的签名问题的经验。当使用pepk.jar工具加密私钥时,出现"NoSuchAlgorithmException"错误。解决方案包括:确保使用JDK 11+版本、更新pepk.jar工具、验证密钥库信息,并提供详细命令行示例。通过升级开发环境和正确配置签名参数,最终成功生成加密密钥文件。文章为开发者提供了实用的技术参考,强调耐心排查问题的重要性。(149字)

m0_62153576的博客 144

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

洛谷4779 求起点到所有点的最小距离。 #include<iostream> #include<queue> #include<cstring> #include<algorithm> #include<vector> using namespace std; const int maxn=111005; struct node{ int v,w; node(int v,int w):v(v),w(w){} bool opera

Gyibin的博客 214

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

P4779 【模板】单源最短路径(标准版)(堆优化dijkstra)

2018 年 7 月 19 日,某位同学在一题里非常熟练地使用了一个广为人知的算法求最短路。然后呢?100→60;Ag→Cu;最终,他因此没能与理想的大学达成契约。小 F 衷心祝愿大家不再重蹈覆辙。

qq_39456436的博客 1310

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

题目背景 2018 年 7 月 19 日,某位同学在NOI Day 1 T1 归程一题里非常熟练地使用了一个广为人知的算法求最短路。 然后呢? 100 \rightarrow 60100→60; \text{Ag} \rightarrow \text{Cu}Ag→Cu; 最终,他因此没能与理想的大学达成契约。 小 F 衷心祝愿大家不再重蹈覆辙。 题目描述 给定一个 nn 个点,mm 条有向边的带非负权图,请你计算从 ss 出发,到每个点的距离。 数据保证你能从 ss 出发到任意点。 ..

qq_63955296的博客 537

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

题目描述 给定一个 NN 个点,MM 条有向边的带非负权图,请你计算从 SS 出发,到每个点的距离。 数据保证你能从 SS 出发到任意点。 输入格式 第一行为三个正整数 N, M, SN,M,S。 第二行起 MM 行,每行三个非负整数 u_i, v_i, w_iu i ​ ,v i ​ ,w i ​ ,表示从 u_iu i ​ 到 v_iv i ​ 有一条权值为 w_iw i ​ 的边。...

weixin_30387663的博客 245

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

题目背景 2018 年 7 月 19 日,某位同学在NOI Day 1 T1 归程一题里非常熟练地使用了一个广为人知的算法求最短路。 然后呢? 100 \rightarrow 60100→60; Ag \rightarrow CuAg→Cu; 最终,他因此没能与理想的大学达成契约。 小 F 衷心祝愿大家不再重蹈覆辙。 题目描述 给定一个NN个点,MM条有向边的带非负权图,...

Endeavor_G的博客 704

P3371 【模板】单源最短路径(弱化版)P4779 【模板】单源最短路径(标准版)(链式前向星存图+dijkstra求单源最短路+堆优化+)

P3371题目链接 P4779题目链接 解题思路: 链式前向星存图+dijkstra求单源最短路+堆优化 AC代码 #include<iostream> #include<cstdio> #include<map> #include<vector> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #include<m

weixin_44063734的博客 242

Luogu P4779 【模板】单源最短路径(标准版)(Dijkstra+堆优化模板)

qwq dij其实和prim挺像的,prim是找权值最小点,dij是找边, 用一个优先队列就可以在加入边的时候直接排序,避免了每次遍历更新min priority_queue <pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q; ...

weixin_30535167的博客 90

P4779 【模板】单源最短路径(标准版)(C++_Dijkstra_堆优化_链式向前星)

题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路。 然后呢? 100→60;100 \rightarrow 60;100→60; Ag→Cu;\text{Ag} \rightarrow \text{Cu};Ag→Cu; 最终,他因此没能与理想的大学达成契约。 小 F 衷心祝愿大家不再重蹈覆辙。 题目描述 给定一个...

ccql's Blog 661

洛谷 P4779 :【模板】单源最短路径(标准版)(Dijkstra+堆优化+链式前向星)

题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路。 然后呢? 100→60; Ag→Cu; 最终,他因此没能与理想的大学达成契约。 小 F 衷心祝愿大家不再重蹈覆辙。 题目描述 给定一个 N 个点,M 条有向边的带非负权图,请你计算从 S 出发,到每个点的距离。 数据保证你能从 S 出发到任意点...

执念 1232

洛谷 P4779 :【模板】单源最短路径(标准版)(Dijkstra+堆优化+链式前向星)...

题目背景 2018 年 7 月 19 日,某位同学在NOI Day 1 T1 归程一题里非常熟练地使用了一个广为人知的算法求最短路。 然后呢? 100→60; Ag→Cu; 最终,他因此没能与理想的大学达成契约。 小 F 衷心祝愿大家不再重蹈覆辙。 题目描述 给定一个N个点,M条有向边的带非负权图,请你计算从S出发,到每个点的距离。 ...

weixin_30695195的博客 70
上一篇: P3371 【模板】单源最短路径(弱化版)( spfa )
下一篇: P3378 【模板】堆 ( 手写 / stl )
Cosmic_Tree
博客等级 码龄7年 134粉丝 337原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值