#根号分治#洛谷 3645 [APIO2015]雅加达的摩天楼
分析
设 \(d[i][j]\) 表示 所处位置为 \(i\),跳跃能力为 \(j\) 的步数,
若 \(j\leq \sqrt{n}\),这样的状态最多有 \(n\sqrt{n}\) 个,
若 \(j>\sqrt{n}\),这样的状态最多有 \(m\sqrt{n}\) 个。
所以最多有 \((n+m)\sqrt{n}\) 个状态,用 \(bitset\) 维护是否走过即可
代码
#include <cstdio>
#include <cctype>
#include <bitset>
#include <queue>
#include <vector>
#define rr register
using namespace std;
const int N=30011;
struct rec{int x,y,z;}; queue<rec>q;
bool unvis[N]; bitset<N>v[N];
vector<int>K[N]; int n,S,T;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
inline void Insert(int x,int y,int z){
if (!unvis[x]){
unvis[x]=1;
rr int siz=K[x].size();
for (rr int i=0;i<siz;++i){
rr int t=K[x][i];
if (!v[x][t]) v[x][t]=1,q.push((rec){x,t,z});
}
}
if (!v[x][y]) v[x][y]=1,q.push((rec){x,y,z});
}
signed main(){
n=iut();
for (rr int Y=iut();Y;--Y){
rr int x=iut()+1,y=iut();
if (S&&!T) T=x;
if (!S) S=x;
K[x].push_back(y);
}
if (S==T) return !printf("0");
Insert(S,30001,0);
while (!q.empty()){
rr rec t=q.front(); q.pop();
if (t.x-t.y==T||t.x+t.y==T)
return !printf("%d",t.z+1);
if (t.x-t.y>0) Insert(t.x-t.y,t.y,t.z+1);
if (t.x+t.y<=n) Insert(t.x+t.y,t.y,t.z+1);
}
return !printf("-1");
}
#根号分治#洛谷 3645 [APIO2015]雅加达的摩天楼的更多相关文章
- 洛谷P3645 [APIO2015]雅加达的摩天楼(最短路+分块)
传送门 这最短路的建图怎么和网络流一样玄学…… 一个最朴素的想法是从每一个点向它能到达的所有点连边,边权为跳的次数,然后跑最短路(然而边数是$O(n^2)$除非自创复杂度比spfa和dijkstra还 ...
- 洛谷$P3645\ [APIO2015]$雅加达的摩天楼 最短路
正解:最短路 解题报告: 传送门$QwQ$ 考虑暴力连边,发现最多有$n^2$条边.于是考虑分块 对于长度$p_i$小于等于$\sqrt(n)$的边,建立子图$d=p_i$.说下关于子图$d$的定义? ...
- 洛谷P3645 [APIO2015]雅加达的摩天楼
题目描述 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N − 1.除了这 NN 座摩天楼外,雅加达市没有其他摩天楼. 有 M 只叫做 “doge” 的神 ...
- 洛咕 P3645 [APIO2015]雅加达的摩天楼
暴力连边可以每个bi向i+kdi连边权是k的边. 考虑这样的优化: 然后发现显然是不行的,因为可能还没有走到一个dog的建筑物就走了这个dog的边. 然后就有一个很妙的方法--建一个新的图,和原图分开 ...
- bzoj 4070 [Apio2015]雅加达的摩天楼 Dijkstra+建图
[Apio2015]雅加达的摩天楼 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 644 Solved: 238[Submit][Status][D ...
- 【BZOJ4070】[Apio2015]雅加达的摩天楼 set+最短路
[BZOJ4070][Apio2015]雅加达的摩天楼 Description 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼 ...
- BZOJ 4070:[APIO2015]雅加达的摩天楼 最短路
4070: [Apio2015]雅加达的摩天楼 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 464 Solved: 164[Submit][Sta ...
- 【题解】P3645 [APIO2015]雅加达的摩天楼(分层图最短路)
[题解]P3645 [APIO2015]雅加达的摩天楼(分层图最短路) 感觉分层图是个很灵活的东西 直接连边的话,边数是\(O(n^2)\)的过不去 然而我们有一个优化的办法,可以建一个新图\(G=( ...
- luogu P3645 [APIO2015]雅加达的摩天楼 分块 根号分治
LINK:雅加达的摩天楼 容易想到设\(f_{i,j}\)表示第i个\(doge\)在第j层楼的最小步数. 转移显然是bfs.值得一提的是把初始某层的\(doge\)加入队列 然后转移边权全为1不需要 ...
- 浅谈分治 —— 洛谷P1228 地毯填补问题 题解
如果想看原题网址的话请点击这里:地毯填补问题 原题: 题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子 ...
随机推荐
- win32-创建透明的图片按钮
// Test_CustomButton.cpp : Defines the entry point for the application. // #include "framework. ...
- git bash走代理
git config --global http.proxy 'http://127.0.0.1:7890' git config --global https.proxy 'http://127.0 ...
- gunzip命令
解压提取文件内容 语法格式:gunzip 参数 压缩包 常用参数 -a 使用ASCII文本模式 -q 静默执行模式 -c 将解压后的文件输出到标准输出设备 -r 递归处理所有子文件 -f 强制解压文件 ...
- java字节、位移以及进制转换
数据存储方式 众所周知,java中的数据都是以二进制的形式存储在计算机中的,但是我们看到的数据怎么是10进制的,因为java提供了很多进制自动转换的方式. 位移 向左位移是*2的幂次,一般都是正数操作 ...
- mysql-对应删除 dict 脚本
-- 1. 此 dict 是在不同租户下的数据字典,查询时需要根据 departid 进行分类查询 -- 2. 删除dict, dict分类主表类型与挂载的子表数据 -- 3. 通过查询到的主表的 g ...
- mysql添加联合唯一索引与删除索引
-- 添加联合唯一索引 alter table <表名> add unique index <索引名称> (name, no, org_id); -- 删除索引 ALTER T ...
- Java 常用类 String的常用方法(2)
1 /** 2 * String 常用方法(2) 3 * boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束 4 * boolean startsWith ...
- Java main()方法的使用说明
1 package com.bytezreo.singleton; 2 3 /** 4 * 5 * @Description main()方法的使用说明 6 * @author Bytezero·zh ...
- springboot中使用restTemplate发送带参数和请求头的post,get请求
最近在工作中使用到了用restTemplate去获取网站数据填入到数据库中,在这里记录下来以便以后使用: 添加相关依赖:版本使用springboot中的 <dependency> < ...
- 使用LabVIEW打开默认应用程序中的文档(PDF,Word,Excel,Html)
问题详情 我想让我的LabVIEW VI使用默认应用程序打开硬盘上的文档.如何实现? 解决方案 有一个名为 "Open a Document on Disk.vi" 的 VI,它可 ...