poj 3539 Elevator——同余类bfs
题目: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的更多相关文章
- [poj 3539] Elevator (同余类bfs)
Description Edward works as an engineer for Non-trivial Elevators: Engineering, Research and Constru ...
- poj3539 Elevator——同余类bfs
题目:http://poj.org/problem?id=3539 题目大意是给定 a, b, c,求 1~h 内有多少个数可以被 a, b, c 通过加减法组成: 这是今天刚讲的神奇的——同余类 b ...
- [POJ] 3539 Elevator
http://poj.org/problem?id=3539 给定一个电梯,可以上升a,b,c层和回到1层,给定楼高h,求可达层数 lyd讲的同余类BFS,方法是先把三个量压成两个,即把h%a,因为对 ...
- 同余类BFS的一些瞎吹
同余类BFS的题,是个OIer基本上都会见过一些,最好的例子就是NOIP 2018 day1 T2---货币系统 虽然这题其实是什么背包就能解决的题目,但数据一变大,出题人坏一点,就没了.... 同 ...
- POJ 3539 Elevator(同余类BFS)
题意 有一部电梯,最初停在1层. 电梯有4个按键,上升a,b,c层,回到一层. 求从一层出发.能到达1~h的哪些楼层. (h<=1018,a,b,c<=105) 题解 这种h能大的图论,一 ...
- BZOJ2118: 墨墨的等式(同余类BFS)(数学转为图论题)
2118: 墨墨的等式 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2944 Solved: 1206[Submit][Status][Discu ...
- POJ 1324 Holedox Moving (状压BFS)
POJ 1324 Holedox Moving (状压BFS) Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 18091 Acc ...
- Luogu4156 WC2016 论战捆竹竿 KMP、同余类最短路、背包、单调队列
传送门 豪华升级版同余类最短路-- 官方题解 主要写几个小trick: \(1.O(nm)\)实现同余类最短路: 设某一条边长度为\(x\),那么我们选择一个点,在同余类上不断跳\(x\),可以形成一 ...
- POJ.1426 Find The Multiple (BFS)
POJ.1426 Find The Multiple (BFS) 题意分析 给出一个数字n,求出一个由01组成的十进制数,并且是n的倍数. 思路就是从1开始,枚举下一位,因为下一位只能是0或1,故这个 ...
随机推荐
- shell中的$()、${}、$(())、(())
$( ) 与 ` ` (反引号)在 bash shell 中,$( ) 与 ` ` (反引号) 都是用来做命令替换用(command substitution)的. 所谓的命令替换与我们第五章学过的变 ...
- 主攻ASP.NET.4.5.1 MVC5.0之重生:系统角色与权限(一)
数据结构 权限分配 1.在项目中新建文件夹Helpers 2.在HR.Helpers文件夹下添加EnumMoudle.Cs namespace HR.Helpers { public enum Enu ...
- HTML如何禁止文本框输入
禁止文本框输入有以下两种方法: 1,设置input为只读状态,代码如下: <input readonly="readonly" value="test1" ...
- 20145231 《Java程序设计》第一次实验
实验一 Java开发环境的熟悉(Windows+IDEA) 实验内容 使用JDK编译.运行简单的Java程序: 使用IDEA编辑.编译.运行.调试java程序: 实验知识点 JVM.JRE.JDK的安 ...
- Python 循环语句(while, for)
# while的使用 # 要注意些循环的时候,要考虑好循环的结束 # 考虑循环结束的方法有2种: # 1.考虑在循环体里改变while 的条件 # 2.在循环体通过break 语句跳出循环 # 方法1 ...
- CCNA 课程 二
传输层:两个重要的协议 TCP 和 UDP TCP: 面向连接的协议:在传输用户数据前,先要建立连接 (TCP的三次握手) 错误检查 数据包序列化 可靠性传输:发送的数据需要接受者提供确认,通过报头中 ...
- showModalDialog改进版,包括Chrome下的特殊处理
父页面: if(window.ActiveXObject){ //IE $("#choose_entp").click(function(){ ...
- java深入探究09-Filter,Listener,国际化
1.Filter过滤器 1)为是么有过滤器 开发项目中经常遇到直接登录主页面要判断用户是否合法,这类代码比较重复,可以通过过滤器来解决 2)过滤器原理生命周期 服务器创建过滤器对象->一个执行i ...
- js多个<ul>相应不同的点击事件
$('ul').on("click","li#left",function(){ currentProvince = $(this).text().replac ...
- Kafka详解一:Kafka简介
问题导读 1.Kafka有何特性?2.Kafka有哪些组件? 背景: 当今社会各种应用系统诸如商业.社交.搜索.浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临如下几个挑战: ...