链式前向星实现的堆优化dij求最短路模板
- #include<cstdio>
- #include<string>
- #include<cstdlib>
- #include<cmath>
- #include<iostream>
- #include<cstring>
- #include<set>
- #include<queue>
- #include<algorithm>
- #include<vector>
- #include<map>
- #include<cctype>
- #include<stack>
- #include<sstream>
- #include<list>
- #include<assert.h>
- #include<bitset>
- #include<numeric>
- #define debug() puts("++++")
- #define gcd(a,b) __gcd(a,b)
- #define lson l,m,rt<<1
- #define rson m+1,r,rt<<1|1
- #define fi first
- #define se second
- #define pb push_back
- #define sqr(x) ((x)*(x))
- #define ms(a,b) memset(a,b,sizeof(a))
- #define sz size()
- #define be begin()
- #define pu push_up
- #define pd push_down
- #define cl clear()
- #define lowbit(x) -x&x
- #define all 1,n,1
- #define rep(i,x,n) for(int i=(x); i<(n); i++)
- #define in freopen("in.in","r",stdin)
- #define out freopen("out.out","w",stdout)
- using namespace std;
- typedef long long LL;
- typedef unsigned long long ULL;
- typedef pair<int,int> P;
- const int INF = 0x3f3f3f3f;
- const LL LNF = 1e18;
- const int maxn = 1e5+;
- const int maxm = 1e6+;
- const double PI = acos(-1.0);
- const double eps = 1e-;
- const int dx[] = {-,,,,,,-,-};
- const int dy[] = {,,,-,,-,,-};
- int dir[][] = {{,},{,-},{-,},{,}};
- const int mon[] = {, , , , , , , , , , , , };
- const int monn[] = {, , , , , , , , , , , , };
- int head[maxn],vis[maxn],dis[maxn];
- int t,n,m,u,v,w,st,ed;
- struct node
- {
- int v,w,nxt;
- }e[maxn<<];
- /*struct cmp
- {
- bool operator()(int a,int b)
- {
- return dis[a]>dis[b];
- }
- };*/
- int tot=;
- void init()
- {
- tot=;
- ms(head,-);
- ms(vis,);
- ms(dis,INF);
- }
- void add(int u,int v,int w)
- {
- e[tot].v=v;
- e[tot].w=w;
- e[tot].nxt=head[u];
- head[u]=tot++;
- }
- void dij(int s,int t)
- {
- priority_queue< pair<int,int> > q;
- dis[s]=;
- q.push(make_pair(,s));
- while(!q.empty())
- {
- int u = q.top().second;
- q.pop();
- for(int i=head[u];i!=-;i=e[i].nxt)
- {
- int v = e[i].v;
- if(dis[v]>dis[u]+e[i].w)
- {
- dis[v]=dis[u]+e[i].w;
- q.push(make_pair(-dis[v],v));
- }
- }
- }
- int ans=dis[t];
- if(ans!=INF)
- printf("%d\n",ans);
- else puts("-1");
- }
- int main()
- {
- while(~scanf("%d%d",&n,&m))
- {
- init();
- for(int i=;i<m;i++)
- {
- scanf("%d%d%d",&u,&v,&w);
- add(u,v,w);
- add(v,u,w);
- }
- scanf("%d%d",&st,&ed);
- dij(st,ed);
- }
- }
- /*
- 【题意】
- 【类型】
- 【分析】
- 【时间复杂度&&优化】
- 【trick】
- 【数据】
- */
链式前向星实现的堆优化dij求最短路模板的更多相关文章
- 【最短路】Dijkstra+ 链式前向星+ 堆优化(优先队列)
Dijkstra+ 链式前向星+ 优先队列 Dijkstra算法 Dijkstra最短路算法,个人理解其本质就是一种广度优先搜索.先将所有点的最短距离Dis[ ]都刷新成∞(涂成黑色),然后从起点 ...
- 模板 Dijkstra+链式前向星+堆优化(非原创)
我们首先来看一下什么是前向星. 前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序, 并记录下以某个点为起点的所有边在数组中的起始位置和 ...
- 链式前向星版DIjistra POJ 2387
链式前向星 在做图论题的时候,偶然碰到了一个数据量很大的题目,用vector的邻接表直接超时,上网查了一下发现这道题数据很大,vector可定会超的,不会指针链表的我找到了链式前向星这个好东西,接下来 ...
- 洛谷P3371单源最短路径Dijkstra版(链式前向星处理)
首先讲解一下链式前向星是什么.简单的来说就是用一个数组(用结构体来表示多个量)来存一张图,每一条边的出结点的编号都指向这条边同一出结点的另一个编号(怎么这么的绕) 如下面的程序就是存链式前向星.(不用 ...
- 链式前向星+SPFA
今天听说vector不开o2是数组时间复杂度常数的1.5倍,瞬间吓傻.然后就问好的图表达方式,然后看到了链式前向星.于是就写了一段链式前向星+SPFA的,和普通的vector+SPFA的对拍了下,速度 ...
- 单元最短路径算法模板汇总(Dijkstra, BF,SPFA),附链式前向星模板
一:dijkstra算法时间复杂度,用优先级队列优化的话,O((M+N)logN)求单源最短路径,要求所有边的权值非负.若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的 ...
- hdu2647 逆拓扑,链式前向星。
pid=2647">原文地址 题目分析 题意 老板发工资,可是要保证发的工资数满足每一个人的期望,比方A期望工资大于B,仅仅需比B多1元钱就可以.老板发的最低工资为888元.输出老板最 ...
- 图的存储结构:邻接矩阵(邻接表)&链式前向星
[概念]疏松图&稠密图: 疏松图指,点连接的边不多的图,反之(点连接的边多)则为稠密图. Tips:邻接矩阵与邻接表相比,疏松图多用邻接表,稠密图多用邻接矩阵. 邻接矩阵: 开一个二维数组gr ...
- 【模板】链式前向星+spfa
洛谷传送门--分糖果 博客--链式前向星 团队中一道题,数据很大,只能用链式前向星存储,spfa求单源最短路. 可做模板. #include <cstdio> #include <q ...
随机推荐
- Spring 学习笔记之整合Hibernate
Spring和Hibernate处于不同的层次,Spring关心的是业务逻辑之间的组合关系,Spring提供了对他们的强大的管理能力, 而Hibernate完成了OR的映射,使开发人员不用再去关心SQ ...
- html 让一行文字居中
文本在行高范围内垂直居中 可以利用行高特性让一行文本居中 line-height:100px://父容器的高度
- 9.python爬虫--pyspider
pyspider简介 PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI.采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项 ...
- dp,状压dp等 一些总结
也就作业几题而已,分析一下提醒 最重要的就是,记住,没用的状态无论怎么转移最后都会是没用的状态,所以每次转移以后的有值的状态都是有用的状态. 几种思考方向: 第一种:枚举当前的状态,转移成另外一个状态 ...
- 转【es中数据节点和主机】
在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题. 默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储 ...
- Git版本回退的最佳方式
使用git开发的过程中,存在误提交的时候怎么办呢?不用慌张,强大的git提供了两种版本回退的方式,可以让你恢复提交之前的内容: 方式一:reset(不推荐) 通过reset的方式,把head指针指向之 ...
- Gradle编译时下载依赖失败解决方法
如果Gradle在编译的时候没有在本地仓库中发现依赖,就会从远程仓库中下载,默认的远程仓库为mavenCentral(),也就是http://repo1.maven.org/maven2/,但是往往访 ...
- HDU 1548 A strange lift (广搜)
题目链接 Problem Description There is a strange lift.The lift can stop can at every floor as you want, a ...
- select下拉箭头改变,兼容ie8/9
各个浏览器下select默认的下拉箭头差别较大,通常会清除默认样式,重新设计 <html> <head> <meta charset="utf-8"& ...
- Coursera在线学习---第九节(1).异常数据检测(Anomaly Detection)
一.如何构建Anomaly Detection模型? 二.如何评估Anomaly Detection系统? 1)将样本分为6:2:2比例 2)利用交叉验证集计算出F1值,可以用F1值选取概率阈值ξ,选 ...