传送门: OJ 新生赛 2018华山论剑。

题目大意:从点1出发,按次序经过K个点,再走到点n。求最短路径。

解题思路:弗洛伊德算法可能超时,所以用单源最短路径算法,依次求出从1到a1,a1到a2.......ak到n的最短路径长度。为降低复杂度,必须使用邻接表存储结构,同时用优先队列进行优化。

#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
struct node
{int id,v;bool operator<(const node B)const{return v>B.v;}
};
int t,n,m,a[1005],x,y,z,k,d[1005],v[1005];
vector<pair<int,int> >e[1005];
void dij(int cur)
{ memset(d,127/3,sizeof d);memset(v,0,sizeof v);priority_queue<node>pq;d[cur]=0;int i,j;for(i=1;i<=n;i++)pq.push({i,d[i]});for(i=1;i<=n;i++){while(v[pq.top().id]) /**< 队列会进入id相同但v不同的重复元素,所以队头可能是之前已经选走的id */pq.pop();       /**< 已选过的结点不能再选,删除 */int t=pq.top().id;pq.pop();v[t]=1;for(j=0;j<e[t].size();j++){int y=e[t][j].first,z=e[t][j].second;if(d[y]>d[t]+z){d[y]=d[t]+z;pq.push({y,d[y]});}}}
}
int main()
{int i,j;cin>>t;while(t--){cin>>n>>m;for(i=1;i<=n;i++)e[i].clear();memset(v,0,sizeof v);for(i=1;i<=m;i++){cin>>x>>y;/**< 实际上本题目实际无需存储边长,边长均为1,为方便读者,此代码采用标准写法存边 */e[x].push_back({y,1});e[y].push_back({x,1});}dij(1);/**< 计算1到其他点最短路径 */cin>>k;long long ans=0, pre=1;for(i=1;i<=k;i++){cin>>a[i];ans+=d[a[i]];/**< pre到a[i]的最短路径 */dij(a[i]);pre=a[i];}cout<<ans+d[n]<<endl;}return 0;
}

18362 寻找Megumi 迪杰斯特拉+优先队列优化相关推荐

  1. 【迪杰斯特拉的优化】 洛谷4779板子题

    P4779 [模板]单源最短路径(标准版) 题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 最终,他 ...

  2. 【讲解 + 模板】Dijkstra迪杰斯特拉+堆优化

    Dijkstra迪杰斯特拉+堆优化 众所周知,朴素的迪杰斯特拉的时间复杂度为O(n^2),这在某些题目当中是会超时的.但如果在迪杰斯特拉中枚举每个最短边时加入堆优化,则迪杰斯特拉的效率则会大大提高. ...

  3. 7-38 社交网络图中结点的“重要性”计算 (30分) 最短路 迪杰斯特拉堆优化

    在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来.他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互作用,可以增强也可以减弱.而结点根据其所处的位置不同,其 ...

  4. 迪杰斯特拉算法优化(dijkstra)

    dijkstra常规实现方式:迪杰斯特拉算法(dijkstra)https://blog.csdn.net/weixin_48898946/article/details/120990493 这里主要 ...

  5. ccf 交通规划(迪杰斯特拉优先队列模板)

    什么跟什么就是刘汝佳小白书迪杰斯特拉队列的优先队列法 #include<bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f ...

  6. 通往奥格瑞玛的道路(二分+迪杰斯特拉堆优化)

    题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...

  7. usaco Sweet Butter(迪杰斯特拉(优先队列优化),bellman_ford算法模板)

    这题开始用没有优化的迪杰斯特拉喜闻乐见的超时了,然后我用bellmanford算法按理说时间复杂度更大但是书上说往往只要很短的时间就可以求出最短路. 所以我用了这个算法但是我对这个算法还是不熟套了模板 ...

  8. 迪杰斯特拉最全详解(朴素版,堆优化+邻接表存图/链式前向星存图)

    迪杰斯特拉 迪杰斯特拉算法分析 迪杰斯特拉(朴素版) 迪杰斯特拉堆优化(邻接表存图) 迪杰斯特拉堆优化(链式前向星存图) 最短路--spfa(链式前向星存图) 迪杰斯特拉算法分析 一般用三种数据结构存 ...

  9. dijkstra算法_最短路径问题——迪杰斯特拉算法(Dijkstra)

    假期过长,导致停更了好长时间,复习一道算法题找找感觉. 前段时间看到一篇文章,里面提到了统治世界的十大算法,其中之一就是迪杰斯特拉算法(Dijkstra),该算法主要解决的"最短路径&quo ...

最新文章

  1. 【资源】学 AI 该学哪些斯坦福 CS 课程,这个清单安排得明明白白
  2. 手机两列布局,正方形
  3. memcache java client_Memcache的客户端连接系列(一) Java
  4. RFIC4463_F3CD
  5. ACM-ICPC知识要点收集
  6. Linux/Android——input_handler之evdev (四) 【转】
  7. 【编程软件】keli烧录代码点击Download或者Debug界面卡死
  8. 步进电机选型及扭矩的计算(粗略计算)
  9. Wamp的介绍和配置,解决安装时一些错误和配置上的一些需要,轻轻松松搭建以为window系统的服务器
  10. 【深度学习】搭建类似LeNet-5网络识别Fashion-MNIST数据集(衣服,鞋子等)
  11. 深度剖析U8系统前后台数据关系-王成军-专题视频课程
  12. Task05|joyfulpandas|变形
  13. 简单的小程序——可操作的表白神器
  14. preg_replace() 函数
  15. Unity SWS自动寻路插件
  16. Spark Scala当中reduceByKey(_+_) reduceByKey((x,y) => x+y)的用法
  17. 解决电脑声音图标红叉的办法
  18. croc使用 —(两个电脑间传输文件)
  19. DameWare无法远程连接解决办法
  20. 西工大学计算机专业考研容易吗,2022年西北工业大学计算机专业考研难度分析及备考经验...

热门文章

  1. 图标选择模态框antd封装
  2. 【数据库基操】启动与连接MySQL数据库
  3. docker做mysql分布式_docker安装WordPress-web mysql分布式安装
  4. 大数据之jstorm,storm,hbase,hadoop and so on
  5. OneNote丢失笔记分区后找回
  6. 科技赋能零售,最终还是要消失无形中
  7. linux 脚本加上行号,关于linux:如何在执行bash脚本时显示行号
  8. 延迟标记 (线段树)
  9. 北京北京移动校园卡/联通校园卡/电信校园卡/对比评测及如何避免被坑
  10. 微信小程序动画-倒计时缩放