洛谷P3403 跳楼机 (spfa+图论)
来源:互联网 发布:scratch2.0趣味编程 编辑:程序博客网 时间:2024/06/08 23:34
跳楼机
题目背景
DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧。
题目描述
Srwudi的家是一幢h层的摩天大楼。由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机,使得访客可以更方便的上楼。
经过改造,srwudi的跳楼机可以采用以下四种方式移动:
向上移动x层;
向上移动y层;
向上移动z层;
- 回到第一层。
一个月黑风高的大中午,DJL来到了srwudi的家,现在他在srwudi家的第一层,碰巧跳楼机也在第一层。DJL想知道,他可以乘坐跳楼机前往的楼层数。
输入输出格式
输入格式:第一行一个整数h,表示摩天大楼的层数。
第二行三个正整数,分别表示题目中的x, y, z。
输出格式:一行一个整数,表示DJL可以到达的楼层数。
输入输出样例
输入样例#1:
154 7 9
输出样例#1:
9
输入样例#2:
3333333333399005 99002 100000
输出样例#2:
33302114671
说明
可以到达的楼层有:1,5,8,9,10,12,13,14,15
想不出来不要死磕这一题,先看看第三题。。。。
1<=h<=2^63-1
1<=x, y, z<=100000
题解:图论。
处理出f[i]数组表示在%x意义下等于i的最低高度。
那么如果到达了这个高度,就可以在这个基础上不断的跳x,达到i+kx的高度,这种高度对答案的贡献就是(h-f[i])/x+1.
f[i]数组用spfa求最短路即可。
加边的时候枚举i=0..x-1
i->(i+y)%x
i->(i+z)%x
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#define N 200003#define LL long longusing namespace std;int point[N],v[N],next[N],can[N],x,y,z,tot;LL h,c[N],f[N];void add(int x,int y,LL z){tot++; next[tot]=point[x]; point[x]=tot; v[tot]=y; c[tot]=z;}void spfa(){memset(can,0,sizeof(can));memset(f,127/3,sizeof(f));f[1%x]=1; can[1]=1;queue<int> p; p.push(1%x);while (!p.empty()){int now=p.front(); p.pop();for (int i=point[now];i;i=next[i]) if (f[v[i]]>f[now]+c[i]) { f[v[i]]=f[now]+c[i]; if (!can[v[i]]) { can[v[i]]=1; p.push(v[i]); } }can[now]=0;}}int main(){//freopen("a.in","r",stdin);scanf("%lld",&h);scanf("%d%d%d",&x,&y,&z);if (x<y) swap(x,y);if (x<z) swap(x,z);for (int i=0;i<=x-1;i++) { add(i,(i+y)%x,(LL)y); add(i,(i+z)%x,(LL)z); }spfa();LL ans=0;for (int i=0;i<=x-1;i++) if (h-f[i]>=0) ans+=(h-f[i])/x+1;printf("%lld\n",ans);}
0 0
- 洛谷P3403 跳楼机 (spfa+图论)
- 【洛谷 P3403】跳楼机(SPFA)
- 洛谷 P3403 跳楼机
- JZOJ4722. 跳楼机
- Jzoj4722 跳楼机
- 【JZ雅礼联考】跳楼机 题解
- 【挖坑记】JZOJ 4722 跳楼机
- 我们自杀吧!(贴图)_2:跳楼
- 洛谷P1346 电车(spfa)
- 洛谷P1342 请柬(spfa)
- 【图论】 SPFA
- JZOJ4722 跳楼机 巧妙地转换为最短路模型
- 关于跳楼
- 跳楼指数
- 跳楼吧
- 漫画:跳楼
- 跳楼须知
- (复习)图论--最短路--SPFA算法
- 图像缩放之双三次插值法
- Android_悬浮效果
- 编译Android出错:Unable to execute dex: Java heap space
- JVM及垃圾回收机制
- HDU 3018 Ant Trip 欧拉路 并查集
- 洛谷P3403 跳楼机 (spfa+图论)
- 动手解决Maven在offline模式中无法使用的BUG
- Android中常见的热门标签的流式布局的实现
- 使用MVC模型的用户登录及注册(验证用户是否存在)
- 单链表删除重复节点
- 扫雷游戏的C语言实现
- 重启nginx时出现的问题
- msyql 简单的sql优化
- hdu1151——Air Raid(最小路径覆盖)