luogu3371 【模板】单源最短路径 dijkstra堆优化
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n, m, s, dis[10005], din, uu, vv, ww, hea[10005], cnt;
bool vis[10005];
struct Node{
	int idx, val;
}dui[1100005];
struct Edge{
	int too, nxt, val;
}edge[1000005];
bool cmp(Node x, Node y){
	return x.val>y.val;
}
void add_edge(int fro, int too, int val){
	edge[++cnt].nxt = hea[fro];
	edge[cnt].too = too;
	edge[cnt].val = val;
	hea[fro] = cnt;
}
int main(){
	cin>>n>>m>>s;
	for(int i=1; i<=m; i++){
		scanf("%d %d %d", &uu, &vv, &ww);
		add_edge(uu, vv, ww);
	}
	memset(dis, 0x3f, sizeof(dis));
	dis[s] = 0;
	dui[++din] = (Node){s, 0};
	while(din){
		Node x=dui[1];
		pop_heap(dui+1, dui+1+din, cmp);
		din--;
		if(vis[x.idx])	continue;
		vis[x.idx] = true;
		for(int i=hea[x.idx]; i; i=edge[i].nxt){
			int t=edge[i].too;
			if(!vis[t] && dis[t]>dis[x.idx]+edge[i].val){
				dis[t] = dis[x.idx] + edge[i].val;
				dui[++din] = (Node){t, dis[t]};
				push_heap(dui+1, dui+1+din, cmp);
			}
		}
	}
	for(int i=1; i<=n; i++)
		if(dis[i]==0x3f3f3f3f)	printf("2147483647 ");
		else	printf("%d ", dis[i]);
	printf("\n");
	return 0;
}
												
											luogu3371 【模板】单源最短路径 dijkstra堆优化的更多相关文章
- 洛谷P3371单源最短路径Dijkstra堆优化版及优先队列杂谈
		
其实堆优化版极其的简单,只要知道之前的Dijkstra怎么做,那么堆优化版就完全没有问题了. 在做之前,我们要先学会优先队列,来完成堆的任务,下面盘点了几种堆的表示方式. priority_queue ...
 - hdu 2544 单源最短路问题 dijkstra+堆优化模板
		
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
 - 单源最短路径Dijkstra算法,多源最短路径Floyd算法
		
1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...
 - [数据结构与算法-15]单源最短路径(Dijkstra+SPFA)
		
单源最短路径 问题描述 分别求出从起点到其他所有点的最短路径,这次主要介绍两种算法,Dijkstra和SPFA.若无负权优先Dijkstra算法,存在负权选择SPFA算法. Dijkstra算法 非负 ...
 - 单源最短路径——dijkstra算法
		
dijkstra算法与prim算法的区别 1.先说说prim算法的思想: 众所周知,prim算法是一个最小生成树算法,它运用的是贪心原理(在这里不再证明),设置两个点集合,一个集合为要求的生成树的 ...
 - 单源最短路径 dijkstra算法实现
		
本文记录一下dijkstra算法的实现,图用邻接矩阵表示,假设图为无向图.而且连通,有向图,不连通图的做法相似. 算法简述: 首先确定"单源"的源.假设是第0个顶点. 维护三个数组 ...
 - matlab练习程序(单源最短路径Dijkstra)
		
图的相关算法也算是自己的一个软肋了,当年没选修图论也是一大遗憾. 图像处理中,也有使用图论算法作为基础的相关算法,比如图割,这个算法就需要求最大流.最小割.所以熟悉一下图论算法对于图像处理还是很有帮助 ...
 - 单源最短路径-Dijkstra算法
		
1.算法标签 贪心 2.算法描述 具体的算法描述网上有好多,我觉得莫过于直接wiki,只说明一些我之前比较迷惑的. 对于Dijkstra算法,最重要的是维护以下几个数据结构: 顶点集合S : 表示已经 ...
 - 洛谷P3371单源最短路径Dijkstra版(链式前向星处理)
		
首先讲解一下链式前向星是什么.简单的来说就是用一个数组(用结构体来表示多个量)来存一张图,每一条边的出结点的编号都指向这条边同一出结点的另一个编号(怎么这么的绕) 如下面的程序就是存链式前向星.(不用 ...
 
随机推荐
- Intellij IDEA项目添加资源文件
			
添加了一个资源文件,但读取的时候出错了 prop.load(Config.class.getResourceAsStream("/resources/dbconfig.properties& ...
 - MVC4学习之官方教程中迁移版本库报错
			
因工作需要,学习MVC4,但是微软官方教程中迁移版本库步骤在本地测试报错 官方教程地址:http://www.asp.net/mvc/overview/older-versions/getting-s ...
 - SVN合并步骤
			
1.trunk->branch/tag 分支路径在分支文件夹中,选择右键检出 2.合并分支到主干分支新增 1.txt 文件 需要合并到主干 在trunck->鼠标右键合并->合并到不 ...
 - github的pull Request使用
			
场景: teamA要一起做一个项目,选择用github管理自己的代码仓库,这时userA在github上新建了一个远程仓库,其他人需要通过pull request来实现提交.那么,问题来了,pull ...
 - pre-empting taskintel手册-Chapter7-Task Management
			
这节描述了IA-32架构的任务管理功能,只有当处理器运行在保护模式的时候,这个功能才是有效的,这节的侧重点在32位任务和32位TSS结构上,关于16位的任务和16位TSS结构,请看7.6节,关于64位 ...
 - python_84_os模块
			
'os模块:提供对操作系统进行调用的接口' import os print(os.getcwd())#获取当前脚本工作目录,即当前Python脚本工作的目录路径 os.chdir('C:\\Users ...
 - cocostudio的bug(1)
			
今天有个女同事问我一个问题,两个cocostudio的ui同时addChild到一个layer上面,高层级的ui设置visible为false,低层级的ui设置的visible设置为true,然后低层 ...
 - Codeforces 517 #B
			
http://codeforces.com/contest/1072/problem/B 开始想的只有搜索,时间复杂度$O(4^n)$,明显有问题. 想了半个小时没有思路,然后想到了正难则反,就开始步 ...
 - OI算法复习
			
搜集一些算法,赛前背一背有好处的 转自各大网站 前排感谢:hzwer.风了咕凉 前辈...Orz 快速读入: int read() { ,f=;char ch=getchar(); ;ch=getch ...
 - Keras预训练模型下载后保存路径
			
https://blog.csdn.net/xiaohuihui1994/article/details/83340080