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,故这个 ...
随机推荐
- 验证——正则<37>
1,郵箱合法性驗證 /* * 郵箱合法性驗證 * @method matchTel * @papram{string} str,電子郵箱 * @return{boolean} * */ functio ...
- cookie的路径和域
1.Cookie的路径介绍 我们知道Cookie 的属性有很多,其中有一个属性是路径path.有些人认为Cookie 的路径指的是Cookie 在客户端的保存路径,其实并不是.Cookie 的路径是相 ...
- P4271 [USACO18FEB]New Barns
题目 P4271 [USACO18FEB]New Barns 做法 这题很长见识啊!! 知识点:两棵树\((A,B)\)联通后,新树的径端点为\(A\)的径端点与\(B\)的径端点的两点 不断加边,那 ...
- ubuntu+vm+ftp
为了将windows下的文件传到linux中去,使用FZ来做服务器,在linux中进入ftp状态获取. 1.下载FileZilla服务器,在windows下安装就行了(试过汉化插件,用了就报错,所以还 ...
- Python 字典Dict概念和操作
# 字典概念:无序的, 可变的键值对集合 # 定义 # 方式1 # {key: value, key: value...} # 例如 # {"name": "xin&qu ...
- codeforces 435B
题意:只能对相邻的两个数字进行交换,允许k次交换,输出交换能得到的最大的数.从最高位开始寻找最优,每次寻找能交换的步数里交换到的最大值进行交换. #include<cstdio> #inc ...
- ZooKeeper服务-操作(API、集合更新、观察者、ACL)
操作 create:创建一个znode(必须要有父节点)delete:删除一个znode(该znode不能有任何子节点)exists:测试一个znode是否存在并且查询它的元数据getACL,setA ...
- js中对象的类型
js中的类型分为三种,"内部对象"."宿主对象"."自定义对象" 1."内部对象"有Date.Function.Arra ...
- ubuntu12.04 错误:phonon: No such file or directory; phonon模块的安装
http://blog.csdn.net/xsl1990/article/details/9009919 错误:phonon: No such file or directory 1)sudo ap ...
- Nagios的基本安装配置
//////////////////////nagios//////////////////////nagios原理:http://www.linuxidc.com/Linux/2013-11/927 ...