[poj 3539] Elevator (同余类bfs)】的更多相关文章

Description Edward works as an engineer for Non-trivial Elevators: Engineering, Research and Construction (NEERC). His new task is to design a brand new elevator for a skyscraper with h floors. Edward has an idée fixe: he thinks that four buttons are…
题目: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<…
题目:http://poj.org/problem?id=3539 题目大意是给定 a, b, c,求 1~h 内有多少个数可以被 a, b, c 通过加减法组成: 这是今天刚讲的神奇的——同余类 bfs 问题! 大概就是选定一个模数,就选最小的(常数可能会比较小?),不妨令作 a,构建一系列点,组成 mod a 剩余系: 然后我们要找到每个点的最小可达数,然后它加上若干个 a 就都是可达的: 对于一个点 x,它可以转移到 (x + b) % b,代价是 b :c 同理: 从起点开始 bfs,对…
http://poj.org/problem?id=3539 给定一个电梯,可以上升a,b,c层和回到1层,给定楼高h,求可达层数 lyd讲的同余类BFS,方法是先把三个量压成两个,即把h%a,因为对于一个x∈{h%a},若x可达,则x+ak一定可达. 然后考虑在这个模a的剩余系中,b和c的情况. 从1开始连边,从点i连向(i+w)%a,代价为w,其中w为b或c. 意义就是,对于一个楼层x,从x到达最近x+w层的代价为w,这很显然. 从1开始做单源最短路,然后只需要统计dis小于等于h的,大于的…
同余类BFS的题,是个OIer基本上都会见过一些,最好的例子就是NOIP 2018 day1  T2---货币系统 虽然这题其实是什么背包就能解决的题目,但数据一变大,出题人坏一点,就没了.... 同余类BFS最早从国家集训队里被搞了出来:当时感觉好神奇,后来就变成了烂大街的套路题....------------cyr的经典名言 记得当时好像考试是还真有人打,好像还怪快的.... 推荐一个差不多就是模板的集训队题(传送门) 题目描述 墨墨突然对等式很感兴趣,他正在研究a_1x_1+a_2x_2+…
题意 有一部电梯,最初停在1层. 电梯有4个按键,上升a,b,c层,回到一层. 求从一层出发.能到达1~h的哪些楼层. (h<=1018,a,b,c<=105) 题解 这种h能大的图论,一眼就知道是同余类. 以模a[1]的余数为下标建立数组,数组的意义是模a[1]为下标的最小的能到达的值. 显然之后的相同模数的楼层都可以达到.统计答案即可. 处理数组用最短路就行. #include<iostream> #include<cstring> #include<algo…
2118: 墨墨的等式 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2944  Solved: 1206[Submit][Status][Discuss] Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在非负整数解. Input 输入的第一行包含3个正整数,分别表示N.BMin.BMax分别表示…
POJ 1324 Holedox Moving (状压BFS) Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 18091 Accepted: 4267 Description During winter, the most hungry and severe time, Holedox sleeps in its lair. When spring comes, Holedox wakes up, moves to the…
传送门 豪华升级版同余类最短路-- 官方题解 主要写几个小trick: \(1.O(nm)\)实现同余类最短路: 设某一条边长度为\(x\),那么我们选择一个点,在同余类上不断跳\(x\),可以形成一个环. 显然只有在同一个环上的两点之间才可能通过\(x\)进行转移.我们选择环上答案最小的点,它一定不会在当次更新时被更新答案,所以直接从这个点开始依次遍历环上的所有点,每一个点尝试从前面的一个点更新答案. \(2.\)将\(\mod n\)的同余类最短路变为\(\mod d\)的同余类最短路: 令…
POJ.1426 Find The Multiple (BFS) 题意分析 给出一个数字n,求出一个由01组成的十进制数,并且是n的倍数. 思路就是从1开始,枚举下一位,因为下一位只能是0或1,故这个数字只能是1 * 10或者1 * 10 + 1.就按照这种方式枚举,依次放入队列,如果是其的倍数,就输出. 一开始没理解题意,以为是找一个能整除的二进制数,错了半天. 代码总览 #include <cstdio> #include <cstring> #include <algo…