题目背景
AHOI2002 DAY2 T2

题目描述
某天,哈利•波特准备去拯救 Super Swamuel 星球上的生灵。该星球上有七种不同的地形,依次分别是:石子路、森林、草地、山地、雪地、沼泽和沙漠。分别用数字 1~7 来表示,穿越这七种地形需要的时间分别用 h1~h7 表示。

任意两个城市之间都存在至少一条通路,而且任意两个直通的城市之间都只存在一种地形。哈利•波特穿越地形 u 所需要的时间与该地形的区域大小无关,而与地形 u 的区域中是否有魔法石有关。如果地形 u 的区域中没有魔法石,哈利•波特需要花费 hu 的时间能穿越该地区;如果他有魔法石,则只要花一半的时间(hu/2)就能穿越地形 u。这里 hu/2 用整除法。

已知没有魔法石的情况下穿越七种地形需要的时间分别如下表格:

地形名称 石子路 森林 草地 山地 雪地 沼泽 沙漠
地形编号(i) 1 2 3 4 5 6 7
穿越时间(hi) 2 6 4 8 6 10 14
哈利•波特将从城市 i 出发到城市 j 去伸张正义,请你帮他寻找出最快的路线。

输入格式
第一行有七个整数 s1~s7 ,分别表示七种地形中是否有魔法石,su=0 表示地形 u 的区域中没有魔法石;su=1 表示地形 u 的区域中有魔法石。su ∈{0,1}
第二行有两个正整数,分别是起点 i 的编号和终点 j 的编号。
第三行有一个正整数 m(m≤10000),表示以下有 m 对直接相连的城市。
随后 m 行,每行三个正整数 i,j,k,分别是城市 i 与城市 j 之间连通,这两个城市之间的地形是 k,其中:0<i,j≤1000,k∈{1,2,3,4,5,6,7} ,地形编号意义请参考“题目描述”中的表格。

输出格式
输出一个整数,即穿越起点城市 i 与终点城市 j 之间的地形需要的最短时间。

样例数据 1
输入  [复制]

0 1 0 0 0 0 0 
1 4 

1 2 1 
1 3 1 
2 4 2 
3 4 3
输出

5
备注
【样例说明】

从路径 1→2→4 穿越,需要的最短时间是:2+(6/2)=5

----------------------------------------------------------------------------------------------------------------------------------

最短路裸题!

我用的是dijkstra领接表+堆优化

据说Floyd都能过...

但是我发现自己隔了一个月没碰的东西就有点忘了 这里总结一下dijkstra堆优化的思路

(PS 像这种无向图!!!需要add两次!!!!!!!卡了好久)

dijkstra算法的核心——对于每个点——找当前点相连的点离起点最近的点——从这个点出发松弛——如果相连的点在集合里,且当前路径优于之前路径那么替换

建立priority_queue<make_pair<int int> > 第一个存路径长度 第二存对应的点

对于当前的点 先从priority_queue里取出离起点路径最短的一个点 (这个操作 在原版dijkstra中是最费时间的)从这个点向它相连的边遍历 进行松弛操作

okok看代码

#include<bits/stdc++.h>
using namespace std;const int INF=0x7fffffff;
int start,end,m;
int x,y,z;
int t[8]={0,2,6,4,8,6,10,14};int to[10005],first[1005],next[10005],v[10005],tot,dis[1005];
priority_queue <pair<int,int> > q;void add(int x,int y,int ooo)
{tot++;next[tot]=first[x];first[x]=tot;to[tot]=y;v[tot]=ooo;
}void dijkstra()
{dis[start]=0;q.push(make_pair(0,start));while(!q.empty()){int k=q.top().second;q.pop();for(int i=first[k];i;i=next[i]){int f=to[i];if(dis[k]+v[i]<dis[f]){dis[f]=dis[k]+v[i];q.push(make_pair(-dis[f],f));}}}
}
int main()
{for(int i=1;i<=7;i++){int is_stone;cin>>is_stone;if(is_stone==1) t[i]=t[i]/2;}cin>>start>>end;cin>>m;for(int i=1;i<=1005;i++){dis[i]=INF;}for(int i=1;i<=m;i++){cin>>x>>y>>z;add(x,y,t[z]);//记得两次!!!!!!!!!!!!!!!!! add(y,x,t[z]);}dijkstra();cout<<dis[end]<<endl;return 0;
}

【AHOI2002】哈利●波特与魔法石相关推荐

  1. 洛谷 P2559 [AHOI2002]哈利·波特与魔法石

    P2559 [AHOI2002]哈利·波特与魔法石 题目描述 输入输出格式 输入格式: 文件中第一行有七个数,分别是 S1. S2 . -. S7 :第二行有两个数,依次分别是起点城市 i 和终点城市 ...

  2. 洛谷——P2559 [AHOI2002]哈利·波特与魔法石

    P2559 [AHOI2002]哈利·波特与魔法石 题目描述 输入输出格式 输入格式: 文件中第一行有七个数,分别是 S1. S2 . -. S7 :第二行有两个数,依次分别是起点城市 i 和终点城市 ...

  3. [AHOI2002]哈利·波特与魔法石

    这道题比较简单,就是一个最短路(SSSP).数据水,用Floyd即可AC.这里用了Dijkstra. 1 #include <iostream> 2 #include <cstdio ...

  4. fjnu 1441 哈利.波特与魔法石

    Description 大年初三的那个晚上,小可可去电影院看了<哈利?波特与魔法石>,回到家坐在椅子上不一会儿就睡着了,并且梦见自己成了哈利?波特驰骋在充满了正义与邪恶的宇宙中执著地为了正 ...

  5. 电影推荐之《 哈利·波特与魔法石》 隐私策略(Privacy policy)

    1.隐私政策涵盖您对本应用的使用. 2.电影推荐之< 哈利·波特与魔法石>不会收集.存储.分享您的任何个人信息或者与您的设备相关的信息.我们不会收集任何统计数据和分析数据,也不会跟踪用户的 ...

  6. 哈里波特与魔法石pdf_哈里·罗伯茨(CSS)CSS框架的命运与失败

    哈里波特与魔法石pdf Harry Roberts helps teams all over the world to build better front ends. Craig spoke to ...

  7. 0924-安徽省选 2002-哈利●波特与魔法石

    题目描述 某天,哈利•波特准备去拯救 Super Swamuel 星球上的生灵.该星球上有七种不同的地形,依次分别是:石子路.森林.草地.山地.雪地.沼泽和沙漠.分别用数字 1-7 来表示,穿越这七种 ...

  8. 哈利·波特与死亡圣器(下)

    哈利进入与伏地魔意识连通的幻境,找到了一些魂器,但也让伏地魔发觉了他们的行动.哈利又一次进入幻境后推断出伏地魔的居所,三人来到了此地.他们看到伏地魔命令毒蛇除掉斯内普,以把长老魔杖的魔力传给自己.弥留 ...

  9. 《哈利·波特与死亡圣器(上)》BD中英双字无水印高清+1080P 720P蓝光地址

    ◎译 名 哈利·波特与死亡圣器(上)/哈利波特:死神的圣物1(港/台)/哈利·波特与死圣(上)/哈利·波特7 ◎片 名 Harry Potter and the Deathly Hallows Par ...

最新文章

  1. python使用sklearn中的make_classification函数生成分类模型(classification)需要的仿真数据、使用pandas查看生成数据的特征数据、目标数据
  2. pytorch lstm 写诗文的魔改,测试,猜想
  3. mybaits二十九:mybatis工作原理以及源码分析
  4. ITK:打开一个二进制图像
  5. jqurey操作radio总结
  6. mysql集群搭建(使用docker 一主一从)
  7. Nginx配置示例文件
  8. matlab 计算指北角,用MATLAB如何计算出矩形区域内的最大值?
  9. Automatic Tumor Segmentation from MRI scans 阅读笔记
  10. 凸函数优化问题的相关讨论
  11. 代码-检测文件的编码
  12. 阻抗分析仪(LCR表)与矢量网络分析仪
  13. 门禁上的push是什么意思_门禁系统专业术语对照表
  14. 诛仙账号合并服务器,《诛仙3》10/17 服务器数据互通公告
  15. 如何用一句话证明你是做产品的?
  16. Android API 29 百度步行导航语音tts集成
  17. Labelme使用——数据集标注详解
  18. 4.3 移位寄存器的实现和应用
  19. 医院网络营销到底该怎么做
  20. 基于libhid/libusb进行usb传输数据

热门文章

  1. Linux虚拟机启动故障处理
  2. 小红书达人评估系统-如何快速确认小红书达人的商业价值
  3. 申宝正规股票探底回升巨震洗盘
  4. Flutter 让软键盘不再自动弹起
  5. 对数几率回归(Logistic Regression)分析与实践
  6. 人生中第二次面试——北漂18年(2)
  7. vue之简单的注册账号
  8. pytorch的函数中的dilation参数的作用
  9. 微软并行库初体验之TPL
  10. 备战NOI 数据结构——栈与单调栈(stack) 以及后缀表达式