题目:http://poj.org/problem?id=3539

考虑把层数分为模a剩余系。同类内可通过+若干个a走到。

不同类之间需要通过+b、+c来走到。

需要求出每一类中最小的能走到的。即最短路。

注意memset成0x3f!不要直接memset成1!

  仔细一看,long long下赋1是17位,赋0x3f是19位。而h是18位。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define ll long long
using namespace std;
const int N=1e5+;
ll h,dis[N],ans;
int a,b,c,head[N],xnt;
bool vis[N];
struct Ed{
int next,to,w;
Ed(int n=,int t=,int z=):next(n),to(t),w(z) {}
}ed[N<<];
void dj()
{
memset(dis,0x3f,sizeof dis);dis[%a]=;//%a //0x3f
priority_queue<pair<ll,int> > q;
q.push(make_pair(-,%a));
while(q.size())
{
int k=q.top().second;q.pop();
while(q.size()&&vis[k])k=q.top().second,q.pop();
if(vis[k])break;vis[k]=;
for(int i=head[k],v;i;i=ed[i].next)
if(dis[k]+ed[i].w<dis[v=ed[i].to])
{
dis[v]=dis[k]+ed[i].w;q.push(make_pair(-dis[v],v));
}
}
}
int main()
{
scanf("%lld%d%d%d",&h,&a,&b,&c);
for(int i=;i<a;i++)
{
ed[++xnt]=Ed(head[i],(i+b)%a,b);head[i]=xnt;
ed[++xnt]=Ed(head[i],(i+c)%a,c);head[i]=xnt;
}
dj();
for(int i=;i<a;i++)if(dis[i]<=h)ans+=(h-dis[i])/a+;//<=h
printf("%lld",ans);
return ;
}

dj

再来个跑得快的(spfa)。

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const int N=1e5+;
ll ans,h,dis[N];
int a,b,c,q[N<<],hd,tl;
bool vis[N];
int main()
{
scanf("%lld%d%d%d",&h,&a,&b,&c);
if(a<b)swap(a,b);if(a<c)swap(a,c);
memset(dis,0x3f,sizeof dis);dis[%a]=;
hd=;q[++tl]=;vis[%a]=;
while(hd<=tl)
{
int k=q[hd++];vis[k]=;
if(dis[(k+b)%a]>dis[k]+b)
{
dis[(k+b)%a]=dis[k]+b;
if(!vis[(k+b)%a])q[++tl]=(k+b)%a,vis[(k+b)%a]=;
}
if(dis[(k+c)%a]>dis[k]+c)
{
dis[(k+c)%a]=dis[k]+c;
if(!vis[(k+c)%a])q[++tl]=(k+c)%a,vis[(k+c)%a]=;
}
}
for(int i=;i<a;i++)if(dis[i]<=h)ans+=(h-dis[i])/a+;
printf("%lld",ans);
return ;
}

poj 3539 Elevator——同余类bfs的更多相关文章

  1. [poj 3539] Elevator (同余类bfs)

    Description Edward works as an engineer for Non-trivial Elevators: Engineering, Research and Constru ...

  2. poj3539 Elevator——同余类bfs

    题目:http://poj.org/problem?id=3539 题目大意是给定 a, b, c,求 1~h 内有多少个数可以被 a, b, c 通过加减法组成: 这是今天刚讲的神奇的——同余类 b ...

  3. [POJ] 3539 Elevator

    http://poj.org/problem?id=3539 给定一个电梯,可以上升a,b,c层和回到1层,给定楼高h,求可达层数 lyd讲的同余类BFS,方法是先把三个量压成两个,即把h%a,因为对 ...

  4. 同余类BFS的一些瞎吹

    同余类BFS的题,是个OIer基本上都会见过一些,最好的例子就是NOIP 2018 day1  T2---货币系统 虽然这题其实是什么背包就能解决的题目,但数据一变大,出题人坏一点,就没了.... 同 ...

  5. POJ 3539 Elevator(同余类BFS)

    题意 有一部电梯,最初停在1层. 电梯有4个按键,上升a,b,c层,回到一层. 求从一层出发.能到达1~h的哪些楼层. (h<=1018,a,b,c<=105) 题解 这种h能大的图论,一 ...

  6. BZOJ2118: 墨墨的等式(同余类BFS)(数学转为图论题)

    2118: 墨墨的等式 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2944  Solved: 1206[Submit][Status][Discu ...

  7. POJ 1324 Holedox Moving (状压BFS)

    POJ 1324 Holedox Moving (状压BFS) Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 18091 Acc ...

  8. Luogu4156 WC2016 论战捆竹竿 KMP、同余类最短路、背包、单调队列

    传送门 豪华升级版同余类最短路-- 官方题解 主要写几个小trick: \(1.O(nm)\)实现同余类最短路: 设某一条边长度为\(x\),那么我们选择一个点,在同余类上不断跳\(x\),可以形成一 ...

  9. POJ.1426 Find The Multiple (BFS)

    POJ.1426 Find The Multiple (BFS) 题意分析 给出一个数字n,求出一个由01组成的十进制数,并且是n的倍数. 思路就是从1开始,枚举下一位,因为下一位只能是0或1,故这个 ...

随机推荐

  1. 【CodeChef】Factorial(n!末尾0的个数)

    The most important part of a GSM network is so called Base Transceiver Station (BTS). These transcei ...

  2. 【Head First Servlets and JSP】笔记3:Servlet的生命周期

    1.servlet的存在就是要为客户服务.servlet的任务就是得到一个用户的请求,再发回一些响应. 请求可能很复杂,也可能很简单,例如,“为我的购物车结账”,这个请求携带了一些重要的数据,你必须知 ...

  3. 函数进阶之结合tornado

    一.本篇博文内容 .协程函数 .面向过程编程 .递归和二分法 二.协程函数 协程函数:就是使用了yield表达式形式的生成器 首先函数的传参有几种? 三种: 1.实参形参传参 2.闭包的形式传参 3. ...

  4. 基于matlab的边缘提取方法的比较

    1.Matlab简述 Matlab是国际上最流行的科学与工程计算的软件工具,它起源于矩阵运算,已经发展成一种高度集成的计算机语言.有人称它为“第四代”计算机语言,它提供了强大的科学运算.灵活的程序设计 ...

  5. 在Linux系统下使用Docker以及Weave搭建Nginx反向代理

    Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动 ...

  6. JAVA基础补漏---数组

    int[] a = new int[5]; int[] b = new int{1,2,3}; int[] c = {4,5,6}; 以上几种定义都可以. a叫动态初始化. b叫静态初始化. c叫静态 ...

  7. 使用easyui的form提交表单,在IE下出现类似附件下载时提示是否保存的现象

    之前开发时遇到的一个问题,使用easyui的form提交表单,在Chrome下时没问题的,但是在IE下出现类似附件下载时提示是否保存的现象. 这里记录一下如何解决的.其实这个现象不光是easyui的f ...

  8. 【转】Android中的IOC框架,完全注解方式就可以进行UI绑定和事件绑定

    转载请注明出处:http://blog.csdn.net/blog_wang/article/details/38468547 相信很多使用过Afinal和Xutils的朋友会发现框架中自带View控 ...

  9. SpringBoot发布到独立的tomcat中运行

    在此文基础上 Eclipse下利用Maven创建SpringBoot的Restful风格程序 spring-boot默认提供内嵌的tomcat,所以打包直接生成jar包,用java -jar命令就可以 ...

  10. 解决PasswordBox的Password非依赖属性,而无法绑定的问题,以及常规命令如何使用

    http://stackoverflow.com/questions/1483892/how-to-bind-to-a-passwordbox-in-mvvm