题目

某一天,少年邂逅了同病相连的IA。见面后,IA一把牵起少年的手,决定和他一起逃离部落,离开这个无法容身的是非之地。

要逃离部落,少年和IA就需要先选择一条耗时最少的路线,从而避免被部落的大人们抓到。部落可以大致分为N个区域,少年和IA在区域1,部落的出口设在区域N。此外部落还有M条连接两个区域道路。道路是无向的,没有一条道路的两端连接相同的区域,也没有两条道路所连接的两个区域完全相同。对于其中前(M−1)条道路,其通过时间是确定的,但最后一条道路,由于地理因素,通过其的时间会不断变化。

现在,少年和IA得知了在K个不同的时段里,通过第M条道路的时间,请您分别计算出在这K 个时段中逃离部落的最少时间,以帮助他们确定行动的时刻。

分析

显然,答案有三种情况。设每次修改边(u,v)
①. 不经过(u,v)
②. S→u→v→T
③. S→v→u→T
如果当前要修改的边的权值为x,d(u,v)表示u,v在图中的最短路,那么答案
Ans=min{d(S,T), d(S,u)+x+d(v,T), d(S,v)+x+d(u,T)}
结合堆优化 Dijkstra,时间复杂度O(NlogN +M)。

我改了3个多小时,结果发现我以前的堆优化写错了。。。
学习了正确的姿势后马上就对了……

无力吐槽(ಥ﹏ಥ)

ps:这里是歌曲的地址
一首歌也能出题,%%%神牛

code

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<string>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector> using namespace std;const long long maxx=1e16+10;struct arr{int x,y;long long w;int next;
}edge[2000000];
int ls[500000];
long long dis[500000];
long long dis1[500000];
long long dis2[500000];
int v[500000];
int n,m,k,s,t;
int edge_m=0;struct cmp{  bool operator ()(int a,int b){  return dis[a]>=dis[b];  }
};  void add(int x,int y,long long w)
{edge_m++;edge[edge_m]=(arr){x,y,w,ls[x]};ls[x]=edge_m;edge_m++;edge[edge_m]=(arr){y,x,w,ls[y]};ls[y]=edge_m;
}struct node
{int num;long long dis;bool operator < (node b) const{return dis > b.dis;}
};priority_queue<node> Q;void dij()
{memset(v,0,sizeof(v));dis[s]=0; Q.push((node){s,0});while (!Q.empty()){node x=Q.top();Q.pop();if (v[x.num]) continue;v[x.num]=1;//printf("%lld %d\n",dis2[x.num],x.num);for (int j=ls[x.num];j;j=edge[j].next){if (dis[edge[j].y]>dis[x.num]+edge[j].w){dis[edge[j].y]=dis[x.num]+edge[j].w;Q.push((node){edge[j].y,dis[edge[j].y]});}}}
}priority_queue<node> QQ;void dij1()
{memset(v,0,sizeof(v));dis1[s]=0; QQ.push((node){s,0});while (!QQ.empty()){node x=QQ.top();QQ.pop();if (v[x.num]) continue;v[x.num]=1;//printf("%lld %d\n",dis2[x.num],x.num);for (int j=ls[x.num];j;j=edge[j].next){if (dis1[edge[j].y]>dis1[x.num]+edge[j].w){dis1[edge[j].y]=dis1[x.num]+edge[j].w;Q.push((node){edge[j].y,dis1[edge[j].y]});}}}
}priority_queue<node> QQQ;void dij2()
{memset(v,0,sizeof(v));dis2[s]=0; QQQ.push((node){s,0});while (!QQQ.empty()){node x=QQQ.top();QQQ.pop();if (v[x.num]) continue;v[x.num]=1;//printf("%lld %d\n",dis2[x.num],x.num);for (int j=ls[x.num];j;j=edge[j].next){if (dis2[edge[j].y]>dis2[x.num]+edge[j].w){dis2[edge[j].y]=dis2[x.num]+edge[j].w;QQQ.push((node){edge[j].y,dis2[edge[j].y]});}}}
}long long min_(long long a,long long b)
{if (a>=b) return b;else return a;
}int main()
{freopen("monogatari.in","r",stdin);freopen("monogatari.out","w",stdout);scanf("%d%d%d",&n,&m,&k);for (int i=1;i<=n;i++){dis[i]=maxx;dis1[i]=maxx;dis2[i]=maxx;}for (int i=1;i<m;i++){int x,y;long long w;scanf("%d%d%lld",&x,&y,&w); add(x,y,w);}s=1; t=n;int u,v;/*for (int i=1;i<=m;i++){if (edge[i].w==0) printf("%d %d %d",edge[i].w,edge[i].x,edge[i].y);}*/scanf("%d%d",&u,&v);dij();s=u;dij1();s=v;dij2();//int tt=t;/*while (sum[tt]){printf("%d %lld\n",sum[tt],dis[tt]);tt=sum[tt];}printf("%lld %lld %lld %lld",dis[13],dis[102],dis[260],dis[t]);*///printf("%lld %lld %lld %lld\n",dis[u],dis[v],dis1[t],dis2[t]);for (int i=1;i<=k;i++){long long w;scanf("%lld",&w);long long mi=min_(dis1[t]+dis[v]+w,dis2[t]+dis[u]+w);//printf("%lld %lld %lld ",dis1[t]+dis[v]+w,dis2[t]+dis[u]+w,w);if ((dis[t]==maxx)&&(mi>dis[t])){printf("+Inf\n");continue;}if (mi<dis[t])printf("%lld\n",mi);elseprintf("%lld\n",dis[t]);}return 0;
}

六兆年と一夜物語 jzoj3501 最短路相关推荐

  1. 《从零开始的 RPG 游戏制作教程》第六期:设置怪物掉落物并部署关卡怪物

    目录 1. 前言 2. 第一期:制作基础场景 3. 第二期:让勇者和怪物登场 4. 第三期:基础的数值设计 5.第四期:从理论的角度简单聊聊关卡 6.第五期:制作物品和技能 第六期:设置怪物掉落物并部 ...

  2. 清晨六问?静夜六思?

    清晨六问?静夜六思? --但凡有成就的人总会擅长给自己提问题 清晨六问? 1.我今天的目标是什么? 2.我的核心大目标是什么? 3.我今天重要的3件事是什么? 4.我今天准备学到哪些新东西? 5.我今 ...

  3. 經典IP華麗回歸,NFT遊戲《開心農場物語》将於2022年5月30日13:30正式公測

    在多年前爆火的游戲IP中,一定有開心網旗下的<開心農場>的一席之地.<開心農場>是由Five Minutes開發機發行,於2008年開布的一款以種植為主的社交網頁游戲,玩家可以 ...

  4. 转:飝兒物語的“Linux创建、删除文件夹”

    原创地址: http://www.cnblogs.com/zf2011/archive/2011/05/17/2049155.html 创建文件夹[mkdir] 一.mkdir命令使用权限 所有用户都 ...

  5. 《第六周RFID作业》物联112118 林家辉

    8-3 简要说明RFID系统的时隙ALOHA算法的工作过程. 时隙ALOHA算法把时间分成多个离散的时隙,每个时隙的长度等于或稍大于一个帧,标签只 能在每个时隙的开始处发送数据.在这种算法中,标签要么 ...

  6. 雨月物語,乌月传说(1953) Ugetsu

    根据上田秋成(Ueda Akinari)的同名书籍,由著名电影制片人沟口健二(Kenji Mizoguchi)执导,<雨月传说>是第二部噩梦之后重新打造的日本最早的主要电影之一. 这部电影 ...

  7. ソ前奏诗存档_如何评价日本摇滚乐团 和楽器バンド(和乐器乐团)?

    这里有一个和楽器バンド的脑残粉不请自来了!最多赞的回答已经很全面了,我再补充一些与问题没什么关系的八卦吧.多图留意 首先来了解一下在和楽器バンド结成前的各成员 主唱 鈴華ゆう子 .尺八 神永大輔 .筝 ...

  8. 我的世界主流服务器模组,我的世界:4款百玩不厌的服务器模组大盘点 植物魔法借鉴崩坏2?...

    我的世界(Minecraft)作为一款自由度极高的沙盒游戏,一直受到无论是国内还是国外玩家的喜爱.MC则又分为单人与多人模式,当你游玩多人私服(玩家自行租聘服务器开服)的时候,大部分见到的都还是1.7 ...

  9. 日文转换为罗马音_又一首为故事而诞生的音乐,YOASOBI:群青|零基础学唱日文歌曲...

    本期提示:熟悉YOASOBI的宝宝们都知道,他们的作品主要是将文字作品音乐化,<夜に駆ける><たぶん>都是他们的代表作.这首<群青>是出自一部漫画作品,群青真的灰常 ...

  10. 一夜之间,「AI孙燕姿」火遍全网!

    来源:新智元 一夜之间,「AI孙燕姿」火遍全网. B站上,AI孙燕姿翻唱的林俊杰「她说」.周董「爱在西元前」.赵雷「成都」等等,让一众网友深陷无法自拔. 「冷门歌手」孙燕姿新晋成为2023年度热门歌手 ...

最新文章

  1. 关于物体位姿估计方法的总结,及其对应的论文
  2. python求点到曲线距离_Python。如何从点和偏移距离的x,y列表中获取偏移样条曲线的x,y坐标...
  3. JavaScript 常用内置对象(字符串属性、Math对象、Array数组对象)
  4. TVM:源码编译安装
  5. 计算机绘图模型的参数方程,关于曲线绘图与运动控制问题的研究.doc
  6. Oracle基础知识-SQL简单命令
  7. Python学习---入门导学篇
  8. python与贝叶斯_python-与PyMC3的贝叶斯相关
  9. mysql源码编译安装
  10. cruzer php sandisk 闪迪u盘量产工具_SanDisk Cruzer Micro(闪迪U盘量产助手)V1.1 最新版
  11. 深度学习与自动驾驶领域的数据集(KITTI,Oxford,Cityscape,Comma.ai,BDDV,TORCS,Udacity,GTA,CARLA,Carcraft)
  12. 队列同步器(AbstractQueuedSynchronizer)(一)
  13. 分布式系统的网络异常
  14. android 仿微信加载框,Android仿微信网络加载弹出框
  15. java实现3D动态效果_js实现3D粒子酷炫动态旋转特效
  16. 给你讲个滑稽的故事:
  17. 还在抱怨pandas运行速度慢?这几个方法会颠覆你的看法
  18. android滚动广告图片素材,安卓手机宣传视频制作软件如何在视频底部添加一行滚动的广告语?视频加滚动水印...
  19. 基于Halcon学习的一维码识别【十四】ean13addon.hdev
  20. 用Python基础知识实现了一个在线的markdown编辑工具、基于Editor.md、Flask、Flask_SQLAlchemy、sm.ms

热门文章

  1. 外星文明 未来计算机,科学家有望未来在地球“设计打印”外星生命
  2. C++动态壁纸软件的开发(含源文件)
  3. dataframe新增一列的方法
  4. 阿里P9告诉你:P6-P10到底啥区别,别再傻傻分不清?怎样才能打怪晋级?
  5. 阿里 P9 揭秘职场晋升:明明一样做好了本职工作,只有我一直不被提拔?
  6. 大数据如何赋能产品—用户特征分析
  7. go 运行代码遇到的问题(同一个包,不同包 之间的引用报错)
  8. php 抽奖活动_PHP实现活动人选抽奖功能
  9. iOS开发--AVPlayer实现音乐播放器
  10. C# Winform Socket即时通讯