城市路(Dijkstra)

这道题目需要用到
Dijkstra plus 版(堆优化)
模板还是一样就是有几个点值得注意
1.这里用的是优先队列,原版需要搜出最小,并且没用过的点,省时间就剩在这里用小根堆就可以完美解决这个问题。
2.模拟链表(我认为有亿 一点难度)需要h,e,w,ne来模拟。
3.还有一个add(a,b,c)函数,表示在链表中加入从a到b距离为c。
void add(int a, int b, int c) // 添加一条边a->b,边权为c
{
e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++ ;
}
4.更行的思路(有改动) 我们在i不为最后一个值的情况下来判断是走A线路(长度为dist[j])好还是B线路好(长度为distance+w[i]).
5.小细节,在输入时因为是无向图所以要加两次像
add(x, y, z);
add(y, x, z);
程序:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int N = 150010;
typedef pair<int,int> PII;
int h[N],e[N],w[N],ne[N],n,m,dist[N],idx;
bool st[N];
void add(int a, int b, int c) // 添加一条边a->b,边权为c
{
e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++ ;
}
int d()
{
dist[1]=0;
priority_queue<PII,vector<PII>,greater<PII>> heap;
heap.push({0,1});
while(heap.size())
{
auto t=heap.top();
heap.pop();
int ver=t.second,distance=t.first;
if(st[ver]) continue;
st[ver]=1;
for(int i=h[ver];i!=-1;i=ne[i])
{
int j=e[i];
if(dist[j]>distance+w[i])
{
dist[j]=distance+w[i];
heap.push({dist[j],j});
}
}
}
if(dist[n]==0x3f3f3f3f) return -1;
else return dist[n];
}
int main()
{
scanf("%d%d", &n, &m);
memset(dist,0x3f,sizeof dist);
memset(h,-1,sizeof h);
while (m -- )
{
int x,y,z;
scanf("%d%d%d", &x, &y,&z);
add(x, y, z);
add(y, x, z);
}
cout<<d()<<endl;
return 0;
}
城市路(Dijkstra)的更多相关文章
- Floyd && Dijkstra +邻接表 +链式前向星(真题讲解来源:城市路)
1381:城市路(Dijkstra) 时间限制: 1000 ms 内存限制: 65536 KB提交数: 4066 通过数: 1163 [题目描述] 罗老师被邀请参加一个舞会,是 ...
- Bzoj 2834: 回家的路 dijkstra,堆优化,分层图,最短路
2834: 回家的路 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 62 Solved: 38[Submit][Status][Discuss] D ...
- HDU-1595Find the longest of shortest(最短路径的最长路Dijkstra+记录路径)
Marica is very angry with Mirko because he found a new girlfriend and she seeks revenge.Since she do ...
- BZOJ 2834: 回家的路 Dijkstra
按照横,竖为方向跑一个最短路即可,算是水题~ #include <bits/stdc++.h> #define N 200005 #define E 2000000 #define set ...
- 最短路径算法(跟新SPFA,Ford)
//以城市路为蓝本介绍算法 1381:城市路(Dijkstra) 时间限制: 1000 ms 内存限制: 65536 KB提交数: 4517 通过数: 1306 [题目描述] ...
- Dijkstra求最短路径&例题
讲了半天好像也许maybe听懂了一点,先写下来233 先整理整理怎么存(开始绕) 最简单的是邻接矩阵存,但是开到10000*10000就MLE了,所以我们用链式前向星存(据说是叫这个名字吧) 这是个什 ...
- NOIP专题复习1 图论-最短路
一.知识概述 今天我们要复习的内容是图论中的最短路算法,我们在这里讲3种最短路求法,分别是:floyd,dijkstra,spfa. 那么我们从几道例题来切入今天讲解的算法. 二.典型例题 1.热浪 ...
- P1462 通往奥格瑞玛的道路 最短路
题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...
- C++之路进阶——优先队列优化最短路径算法(dijkstra)
一般的dijkstra算法利用贪心的思想,每次找出最短边,然后优化到其他点的的距离,我们还采用贪心思路,但在寻找最短边进行优化,之前是双重for循环,现在我们用优先队列来实现. 代码解释: //样例程 ...
- Python爬虫——城市公交、地铁站点和线路数据采集
本篇博文为博主原创,转载请注明. 城市公交.地铁数据反映了城市的公共交通,研究该数据可以挖掘城市的交通结构.路网规划.公交选址等.但是,这类数据往往掌握在特定部门中,很难获取.互联网地图上有大量的信息 ...
随机推荐
- NC-UClient下载安装应用详解
aliases: [] tags : " #NC " summary: [UClient下载安装NCC应用详解] product: [NCX] author : [yaenli] ...
- tomcat报Address localhost:1099 is already in use
idea运行tomcat报Address localhost:1099 is already in use 解决方案: 电脑桌面->ctrl+shift+esc 打开任务管理器,选择详细信息,找 ...
- .NET实现堆排序
堆排序及相关知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序.首先简单了解下堆结构. 堆 堆是具 ...
- uwsgi 启动配置文件
# uwsig使用配置文件启动 [uwsgi] # 项目目录 chdir=/myfiles/xxx/xxx/my_project # 指定项目的application module=my_projec ...
- linux ip命令
ip link show # 显示网络接口信息 ip link set eth0 up # 开启网卡 ip link set eth0 down # 关闭网卡 ip link set eth0 pro ...
- 【Java并发007】原理层面:ReentrantLock中lock()、unlock()全解析
一.前言 Java线程同步两种方式,synchronized关键字和Lock锁机制,其中,AQS队列就是Lock锁实现公平加锁的底层支持. 二.AQS源码对于lock.lock()的实现 2.1 AQ ...
- 面试官:介绍一下 Redis 三种集群模式
小码今天去面试. 面试官:给我介绍一下Redis集群, 小码:啊,平时开发用的都是单机Redis,没怎么用过集群了. 面试官:好的,出门右转不谢. 小码内心困惑:在小公司业务量也不大,单机的 Redi ...
- 为什么标准库的模板变量都是inline的
最近在看标准库里的type_traits的时候发现了个有趣的地方,几乎所有在标准库里的变量模板都是inline的! 不仅常见的实现上(libstdc++.libc++.ms stl)都是inline的 ...
- easyUI ajax拼接样式失效
重新渲染: $.parser.parse()
- 【重难点】函数式接口、函数式编程、匿名内部类、Lambda表达式、语法糖
一.函数式接口 1.概念 仅有一个抽象方法的接口 适用于函数式编程(Lambda表达式) 常见:Runnable.Comparator<>.生产型接口Producer的get方法.消费型接 ...