洛咕 P3645 [APIO2015]雅加达的摩天楼
暴力连边可以每个bi向i+kdi连边权是k的边。
考虑这样的优化:
然后发现显然是不行的,因为可能还没有走到一个dog的建筑物就走了这个dog的边。
然后就有一个很妙的方法——建一个新的图,和原图分开,这样就没有问题了。

左边这一个是原图,连向原图的点边是可以走的,但是原图的点可以走出去当且仅当这个点上有一个d=目标图d的dog
可以这样建\(\sqrt n\)个图,剩下的图在原图上暴力建,边数都\(<\sqrt n\)
所以最后点数边数都是\(n\sqrt n\)的
注意不用把图建出来,在跑的时候知道了这个点的编号以及d的值就可以了
(代码d=0代表原图)
#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
using std::pair;
using std::make_pair;
int B[30010],P[30010];
std::vector<int>s[30010];
struct point{int x,y;};
#define len 30010*200
pair<int,int>que[len];int hd,tl;
ll dist[30010][200];
bool inq[30010][200];
int main(){
#ifndef ONLINE_JUDGE
freopen("3645.in","r",stdin);
freopen("3645.out","w",stdout);
#endif
int n=gi(),m=gi(),sz=sqrt(n);
for(int i=1;i<=m;++i)B[i]=gi()+1,P[i]=gi(),s[B[i]].push_back(P[i]);
memset(dist,63,sizeof dist);
dist[B[1]][0]=0;que[tl++]=make_pair(B[1],0);inq[B[1]][0]=1;
while(hd^tl){
int x=que[hd].first,y=que[hd].second;
#define update(a,b,c) {if(dist[a][b]>dist[x][y]+c){dist[a][b]=dist[x][y]+c;if(!inq[a][b]){inq[a][b]=1,que[tl++]=make_pair(a,b);if(tl==len)tl=0;}}}
if(y){
update(x,0,0);
if(x>y)update(x-y,y,1);
if(x+y<=n)update(x+y,y,1);
}else{
for(int i=0;i<s[x].size();++i)
if(s[x][i]<=sz)update(x,s[x][i],0)
else{
for(int j=x-s[x][i],k=1;j>0;j-=s[x][i],++k)update(j,0,k);
for(int j=x+s[x][i],k=1;j<=n;j+=s[x][i],++k)update(j,0,k);
}
}
++hd;if(hd==len)hd=0;
inq[x][y]=0;
}
if(dist[B[2]][0]==dist[0][0])puts("-1");
else printf("%lld\n",dist[B[2]][0]);
return 0;
}
洛咕 P3645 [APIO2015]雅加达的摩天楼的更多相关文章
- 洛谷P3645 [APIO2015]雅加达的摩天楼
题目描述 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N − 1.除了这 NN 座摩天楼外,雅加达市没有其他摩天楼. 有 M 只叫做 “doge” 的神 ...
- 洛谷P3645 [APIO2015]雅加达的摩天楼(最短路+分块)
传送门 这最短路的建图怎么和网络流一样玄学…… 一个最朴素的想法是从每一个点向它能到达的所有点连边,边权为跳的次数,然后跑最短路(然而边数是$O(n^2)$除非自创复杂度比spfa和dijkstra还 ...
- 洛谷$P3645\ [APIO2015]$雅加达的摩天楼 最短路
正解:最短路 解题报告: 传送门$QwQ$ 考虑暴力连边,发现最多有$n^2$条边.于是考虑分块 对于长度$p_i$小于等于$\sqrt(n)$的边,建立子图$d=p_i$.说下关于子图$d$的定义? ...
- 【题解】P3645 [APIO2015]雅加达的摩天楼(分层图最短路)
[题解]P3645 [APIO2015]雅加达的摩天楼(分层图最短路) 感觉分层图是个很灵活的东西 直接连边的话,边数是\(O(n^2)\)的过不去 然而我们有一个优化的办法,可以建一个新图\(G=( ...
- luogu P3645 [APIO2015]雅加达的摩天楼 分块 根号分治
LINK:雅加达的摩天楼 容易想到设\(f_{i,j}\)表示第i个\(doge\)在第j层楼的最小步数. 转移显然是bfs.值得一提的是把初始某层的\(doge\)加入队列 然后转移边权全为1不需要 ...
- luogu P3645 [APIO2015]雅加达的摩天楼
luogu 暴力? 暴力! 这个题有点像最短路,所以设\(f_{i,j}\)表示在\(i\)号楼,当前\(doge\)跳跃能力为\(j\)的最短步数,转移要么跳一步到\(f_{i+j,j}\)和\(f ...
- 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 ...
随机推荐
- 有序字典(OrderedDict)、默认字典(defaultdict)内置函数
http://www.cnblogs.com/wupeiqi/articles/5115190.html import collections do = collections.OrderedDict ...
- spring-boot-jpa 自定义查询工具类
1.pom文件中添加如下配置 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...
- 021.15 IO流 其他流
IO包中的其他类操作基本数据类型:DataInputStream与DataOutputStream操作字节数组:ByteArrayInputStream与ByteArrayOutputStream操作 ...
- ajax跨域请求在IE8中存在的问题
从没打算怎么去兼容老版本IE,毕竟微软自己都放弃了,可是最近做好的东西在所有的IE下都会出问题:GetJson不执行 本来觉得挺简单的,度娘也给出了一大堆的解决方案,可惜,基本上都是在说缓存,实际上并 ...
- ubuntu16.04更新内核--使用4.6以上的内核会让用A卡的Dell电脑更快--及卸载多余内核
tips:我自己就是Dell的A卡电脑,用16.04桌面感觉不如fedora流畅,后来手动升级到4.6.2内核,发现可以和fedora与windows一般桌面操作流畅度. 我试过了4.7的开发版内核, ...
- 在myeclipse的工作环境上配置默认编码为UTF-8
将默认环境转为UTF-8,看图分析: 在windows->Preferences上 这样整个环境就变成UTF-8,只是这样还不够, 还须要,假设你须要所有文件都设为UTF-8,就: wa ...
- 2002. [HNOI2010]弹飞绵羊【LCT】
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- ajax跨域调用webservice例子
[WebMethod(Description = "这是一个描述")] public void GetTIM() { try { SqlDataAdapter da = new S ...
- virtualbox+vagrant学习-2(command cli)-10-vagrant Port命令
Port 格式: vagrant port [options] [name|id] 端口命令显示映射到主机端口的客户端口的完整列表 userdeMacBook-Pro:~ user$ vagrant ...
- Nginx如何配置静态文件直接访问
其实前面在这篇文章Nginx之动静分离中已经提到过如何配置静态文件直接访问,今天突然再写是因为之前写的不够完善,所以这一篇文章你可以理解为是在前一个基础上的扩展. 之所以下午临时想到这个,是因为之前搭 ...