挺有趣的分块的题目。

直接暴力建边SPFA貌似是$O(nm)$的。

然后考虑分块,$\sqrt n$一下用虚拟节点辅助连边,

以上的直接暴力连边即可。

然后卡卡时间,卡卡空间。

终于在UOJ上T掉辣。

遂弃疗

#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define mp make_pair
#define inf 0x3f3f3f3f
#define maxn 30005int n,m,b[maxn],p[maxn],cnt=0;
int num[maxn][101],T,s,t;
int h[maxn*101],to[maxn*500],ne[maxn*500],en=0,dis[maxn*101];
int w[maxn*500],inq[maxn*101];
queue <int> q;
void add(int a,int b,int c)
{to[en]=b;ne[en]=h[a];w[en]=c;h[a]=en++;}void SPFA()
{memset(dis,0x3f,sizeof dis);dis[s]=0;inq[s]=1;q.push(s);while (!q.empty()){int x=q.front();q.pop();inq[x]=0;for (int i=h[x];i>=0;i=ne[i])if (dis[to[i]]>dis[x]+w[i]){dis[to[i]]=dis[x]+w[i];if (!inq[to[i]]){inq[to[i]]=1;q.push(to[i]);}}}if (dis[t]!=inf) printf("%d\n",dis[t]);else printf("-1\n");return;
}int read()
{int x=0,f=1; char ch=getchar();while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();}while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();}return x*f;
}int main()
{memset(h,-1,sizeof h);n=read();m=read();T=min((int)sqrt(n),100);cnt=n;F(i,1,n) F(j,1,T) num[i][j]=++cnt;F(i,1,m) b[i]=read(),p[i]=read(),b[i]++;s=b[1];t=b[2];F(i,1,n) F(j,1,T){if (i+j<=n) add(num[i][j],num[i+j][j],1);if (i-j>0) add(num[i][j],num[i-j][j],1);add(num[i][j],i,0);}F(i,1,m){if (p[i]<=T) add(b[i],num[b[i]][p[i]],0);else{for (int j=1;b[i]+j*p[i]<=n;j++) add(b[i],b[i]+j*p[i],j);for (int j=1;b[i]-j*p[i]>=1;j++) add(b[i],b[i]-j*p[i],j);}}SPFA();return 0;
}

  

转载于:https://www.cnblogs.com/SfailSth/p/6776435.html

BZOJ 4070 [Apio2015]雅加达的摩天楼 ——分块 SPFA相关推荐

  1. bzoj 4070: [Apio2015]雅加达的摩天楼 最短路+分块

    题意 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼外,雅加达市没有其他摩天楼. 有 M 只叫做 "doge&quo ...

  2. bzoj4070 [Apio2015]雅加达的摩天楼 分块+spfa

    Description 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼外,雅加达市没有其他摩天楼. 有 M 只叫做 " ...

  3. 4070: [Apio2015]雅加达的摩天楼

    4070: [Apio2015]雅加达的摩天楼 Time Limit: 10 Sec   Memory Limit: 256 MB Submit: 415   Solved: 146 [ Submit ...

  4. 【BZOJ 4070】 [Apio2015]雅加达的摩天楼

    4070: [Apio2015]雅加达的摩天楼 Time limit: 1000 ms Memory limit: 262144 KB Description The city of Jakarta ...

  5. 题解 P3645 【[APIO2015]雅加达的摩天楼】

    题解 P3645 [[APIO2015]雅加达的摩天楼] 一看求最短先想dp,发现要考虑的状态和转移太多没法做. 再一看是从一个点往另一个点跳,可以考虑最短路. 直接建边会O(n^2) 优化:本题中, ...

  6. [APIO2015]雅加达的摩天楼

    题目描述 印尼首都雅加达市有 NNN 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 000 到 $N − 1$ .除了这 NNN 座摩天楼外,雅加达市没有其他摩天楼. 有 MMM 只叫做 ...

  7. 洛谷P3645 [APIO2015]雅加达的摩天楼

    题目描述 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N − 1.除了这 NN 座摩天楼外,雅加达市没有其他摩天楼. 有 M 只叫做 "dog ...

  8. [APIO2015] 雅加达的摩天楼

    link 考虑暴力,每个狗直接向他能到达的点连一条以到达时间为边权的边,然后跑$spfa$即可,建变数量$N\times M$ 但是$N \leq 30000,M \leq 30000$,所以优化建图 ...

  9. P3645/BZOJ4070 [APIO2015]雅加达的摩天楼

    显然任意一种doge都只会单向行走且最多使用一次. 假设p<=√n,那么总状态不超过n√n; 假设p>√n,因为任意一个doge行走不超过n/p<√n步,总状态不超过m√n. 于是暴 ...

最新文章

  1. 在思科模拟器下搭建WWW、DNS、FTP、Email服务
  2. 数据结构1:单链表反转java代码解释
  3. Unity3D学习笔记之二资源导入以及工程管理
  4. 设计模式:原型模式(C++)【克隆羊多莉】
  5. 谷歌为什登不上去github_安卓开源是假的,谷歌随时禁用,华为手机在海外市场已经快跌没了...
  6. 高甜预警|甜齁你的情人节促销海报设计模板
  7. Linux RT(1)-硬实时Linux(RT-Preempt Patch)在PC上的编译、使用和测试
  8. 流形学习t-SNE,LLE,Isomap
  9. SQL Server 2008 示例库 AdventureWorks2008R2
  10. 进程的初步认识(程序与进程、并发、单道程序设计、多道程序设计、CPU、MMU)
  11. 微信支付开发(1)--普通商户申请、账户验证、签约、公众号授权流程详解
  12. 桌面图标计算机图标被禁用,电脑桌面图标常见问题
  13. 获取手机IMEI/ICCID/IMSI
  14. 华为Datacom认证介绍
  15. 专访民生银行:CPOS平台如何从线下布局移动支付
  16. 【Pyecharts】Python数据可视化:英雄联盟2020赛季数据全方位解读~
  17. 8个企业微信的功能,你知道几个,喜欢用哪个?
  18. 设计一个三维向量类,并实现向量的加法、减法以及向量与标量的乘法和除法运算。
  19. android 同根动画_Android(java)学习笔记141:Android下的逐帧动画(Drawable Animation)...
  20. 2016年十大商业领袖:敢于冒险,善于坚持,勇于自省

热门文章

  1. DCMTK:类DcmSequence和DcmPixelSequence的测试程序
  2. C语言删除链表的算法(附完整源码)
  3. OpenGL Texture Coordinate Wrapping纹理坐标包装的实例
  4. OpenGL linesmooth线平滑的实例
  5. OpenGL次表面散射
  6. C语言实现了一个顺序表(附完整源码)
  7. C++const修饰成员函数
  8. 计算机辅助测试英语缩写,“CAT”是“Computer-Aided Testing”的缩写,意思是“计算机辅助测试”...
  9. java 经典语录_JavaSpring过时的经典语录
  10. python数据库教程_Python连接mysql数据库及简单增删改查操作示例代码