第一次遇到这种数学题转化为图论的题目,与我一开始的想法相同,将其中一个变量与另外两个变量分离开来,便于处理。由于以前一直认为SPFA会被卡,所以使用了堆优化的Dijkstra,结果超时了,为什么呢?因为我们构造出来的图是一张很稀疏的图,在这种图上Dijkstra与SPFA比较是比较劣的。由于图是我们自己构造的,并不是什么专门用来卡SPFA的网格图等等,所以可以使用SPFA,一定不会超时。(打破了我不要用SPFA的认识233)
另外,还是要注意边界情况,当x为1的时候并不存在模x意义下能够跳到1楼的情况,因此在这种情况下dis[1]是不会被纳入计算的,答案就变成了0,但其实是题中所给的h。

#include<bits/stdc++.h>
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
#define per(i,r,l) for(int i=(r);i>=(l);i--)
using namespace std;
typedef long long ll;
const int N=1e5+10;
int x,y,z;
int to[N*2],nxt[N*2],w[N*2],head[N],len;
ll h,ans,dis[N];
inline void addedge(int a,int b,int ww){ nxt[++len]=head[a]; head[a]=len; to[len]=b; w[len]=ww; }
queue<int> q;
bool inq[N];
int main(){cin>>h>>x>>y>>z;if(x==1){cout<<h;return 0;}rep(i,0,x-1) addedge(i,(i+y)%x,y),addedge(i,(i+z)%x,z);memset(dis,0x3f,sizeof(dis)); dis[1]=1;q.push(1); inq[1]=true;while(!q.empty()){int h=q.front(); q.pop(); inq[h]=false;for(int i=head[h];i!=0;i=nxt[i]){if(dis[h]+w[i]<dis[to[i]]){dis[to[i]]=dis[h]+w[i];if(!inq[to[i]]){inq[to[i]]=true;q.push(to[i]);}}}}rep(i,0,x-1) if(dis[i]<=h) ans+=(h-dis[i])/x+1;cout<<ans;return 0;
}

最短路模型-跳楼机-洛谷P3403相关推荐

  1. 【洛谷 P3403】跳楼机(SPFA)

    P3403 跳楼机 题目背景 DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧. 题目描述 Srwudi的家是一幢h层的摩天大楼.由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机, ...

  2. 最短路分层图专题 洛谷P2939,4822,4568

    2020.6.3 今天主要练习了下分层图.看洛谷题解每次都能有新收获.今天本来想练dp,后来感觉可能会太自闭了,不如先来一发最短路,毕竟看家本领不能忘.然后点进了北京某年wc的一道题,让求1-n的最短 ...

  3. 第K短路模板【POJ2449 / 洛谷2483 / BZOJ1975 / HDU6181】

    1.到底如何求k短路的? 我们考虑,要求k短路,要先求出最短路/次短路/第三短路--/第(k-1)短路,然后访问到第k短路. 接下来的方法就是如此操作的. 2.f(x)的意义? 我们得到的f(x)更小 ...

  4. 【洛谷3043】跳楼机(最短路)

    [洛谷3043]跳楼机(最短路) 题面 洛谷 题解 思路很妙嗷. 先只考虑只用\(y,z\)两种移动方式,它们一定能够到达一些楼层, 那么这些楼层再只用\(x\)拓展就能够计算答案. 那么我们这样子计 ...

  5. 同余最短路(P3403 跳楼机)

    同余最短路 前置 给定m个数,这m个数可以重复取,问最大的这m个数不能拼成的数,或者给定一定范围,范围里有多少个数是这m个数可以拼成的,对于这种问题我们可以考虑同余最短路的算法. P3403 跳楼机 ...

  6. JZOJ #4722 跳楼机 (最短路模型的完美转化)

    题目描述: 给出$h,x,y,z$,求在$h$以内,$x,y,z$可以凑出多少个不同的数.$(1\leq{h}\leq{10^{18}},1\leq{x,y,z}\leq{10^5})$ 解题思路: ...

  7. 洛谷2505 [HAOI2012]道路(最短路计数)

    洛谷传送门 [题目分析] 线段树?bczd,这么小的范围直接暴力就行啦. 直接O(n)枚举源点,每次跑最短路,然后对于每一条路径统计是否在最短路上.两个端点各有多少条最短路径经过即可. [代码~] # ...

  8. 洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA

    洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA 二分交费最多的一次的钱数 然后只将符合要求的边加入图中 如果到终点的最短路大于等于血量 或者直接起点不能到达终点 那么说明不符合要求 需要 ...

  9. 洛谷 1144 最短路计数 bfs

    洛谷1144 最短路计数 传送门 其实这道题目的正解应该是spfa里面加一些处理,,然而,,然而,,既然它是无权图,,那么就直接bfs了,用一个cnt记录一下每一个点的方案数,分几种情况讨论一下转移, ...

最新文章

  1. 研究性能测试工具之systemtap入门指南(四)
  2. flask 控制台输出到文件
  3. pre使页面正确显示文本格式
  4. SVN 版本服务器搭配全过程详解(含服务端、客户端)
  5. 一起学nRF51xx 2 - clock
  6. 使用 GitHub, Jekyll 打造自己的免费独立博客
  7. 洛谷 P3243 【[HNOI2015]菜肴制作】
  8. mesh渲染到ui_在Unity中使用UGUI修改Mesh绘制几何图形
  9. 深入分析 Flutter 渲染性能
  10. Ubuntu 8.04 LTS的离线升级包运用教程
  11. apache简单安全配置
  12. ZOJ Monthly, March 2018 A Easy Number Game
  13. 有关睡眠分期规则判读的基础知识整理(基于美国睡眠医学会AASM 判读手册2.3版)
  14. SteamSDK发布更新
  15. xlsx的python处理
  16. maven-assembly-plugin
  17. 《裁梦为魂》 - 银临 :OI版
  18. 输入192.168.1.1登陆页面打不开怎么办
  19. 坑爹公司大盘点 --- 转自拉钩
  20. [ERROR] Please refer to XXXXXXXXXXX for the individual test result

热门文章

  1. Vue实现分页导出,打印
  2. termux使用教程python-Termux折腾记--进阶之python库使用
  3. tp6记录第二天路由操作
  4. MySQL获取列表中的年份数据
  5. 在磁盘上也存有10个学生的数据,要求将第 1、3、5、7、9 的学生数据输入到计算机
  6. Oracle -- 分析函数
  7. 微信小程序之聊天室(多人聊天室)总结
  8. 量化交易策略 - 均仓策略
  9. 【SMS】SMS协议介绍之SMS协议架构
  10. 对壁纸窗口(Wallpaper Window)的管理分析