BZOJ 4070 [Apio2015]雅加达的摩天楼 ——分块 SPFA
挺有趣的分块的题目。
直接暴力建边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 30005 int 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;
}
BZOJ 4070 [Apio2015]雅加达的摩天楼 ——分块 SPFA的更多相关文章
- bzoj 4070: [Apio2015]雅加达的摩天楼【spfa】
明明是个最短路却有网络流一样的神建图= A = 首先要是暴力建图的话最坏有O(nm)条边.所以优化建图. 考虑分块思想,设bs=sqrt(n),对于p大于bs的,直接连边即可,最多有sqrt(n)条, ...
- BZOJ 4070:[APIO2015]雅加达的摩天楼 最短路
4070: [Apio2015]雅加达的摩天楼 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 464 Solved: 164[Submit][Sta ...
- bzoj 4070 [Apio2015]雅加达的摩天楼 Dijkstra+建图
[Apio2015]雅加达的摩天楼 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 644 Solved: 238[Submit][Status][D ...
- BZOJ 4070: [Apio2015]雅加达的摩天楼 根号分治+spfa
此题卡Dijkstra... Code: #include <bits/stdc++.h> #define N 30005 #define M 4000000 #define ll lon ...
- luogu P3645 [APIO2015]雅加达的摩天楼 分块 根号分治
LINK:雅加达的摩天楼 容易想到设\(f_{i,j}\)表示第i个\(doge\)在第j层楼的最小步数. 转移显然是bfs.值得一提的是把初始某层的\(doge\)加入队列 然后转移边权全为1不需要 ...
- 4070: [Apio2015]雅加达的摩天楼
Description 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼外,雅加达市没有其他摩天楼. 有 M 只叫做 “do ...
- [APIO2015] 雅加达的摩天楼 (分块,最短路)
题目链接 Solution 分块+\(Dijkstra\). 难点在于建边,很明显 \(O(n^2)\) 建边会挂一堆 . 那么考虑一下, \(n^2\) 建边多余的是哪些东西 \(???\) 很显然 ...
- 【BZOJ4070】[Apio2015]雅加达的摩天楼 set+最短路
[BZOJ4070][Apio2015]雅加达的摩天楼 Description 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼 ...
- 【题解】P3645 [APIO2015]雅加达的摩天楼(分层图最短路)
[题解]P3645 [APIO2015]雅加达的摩天楼(分层图最短路) 感觉分层图是个很灵活的东西 直接连边的话,边数是\(O(n^2)\)的过不去 然而我们有一个优化的办法,可以建一个新图\(G=( ...
随机推荐
- 将bat批处理文件注册成windows服务
C:\Users\lenovo>sc create MyService binPath= "C:\Program Files\restartOracle.bat" type ...
- 6.3安装squid
1. Frist you need to install Development tools #yum groupinstall "Development Tools" 2. Ge ...
- Java读取properties配置文件工具类
1. PropertyUtils.java package javax.utils; import java.io.InputStream; import java.util.Properties ...
- theano 模块 MLP示例
theano 模块 MLP示例,有需要的朋友可以参考下. theano教程Example: MLP: 约定数组为列向量, 层级:将多层传感器定义为一连串的层级,每个层级定义为一个类.类属性包括:权重. ...
- vue中created、mounted等方法整理
- 函数指针 && 指针函数
bitmap.anim_and_exit((void(*)(void*, int))anim_gpu,(void(*)(void*))anim_exit); 在学习arm过程中发现这“指针函数”与“函 ...
- 关于后台获取不到HiddenField值的有关问题
服务器加载aspx程序时,首先要执行后台cs文件中的page_load等方法中的代码,其它按钮事件等是不执行的,生成页面发送到客户端.客户端执行时会响应js脚本,提交到服务器后除了执行page_loa ...
- vue项目各页面间的传值
githut地址:https://github.com/liguoyong/vueobj1 一.父子之间主键传值:(主要是在父主件里的子主件传递参数,然后再子主件里用props接收) 例如Father ...
- django+xadmin在线教育平台(二)
老话总是没错的,工欲善其事,必先利其器 教你安装pycharm,mysql,navicat,python相关环境. windows下搭建开发环境 2-1 pycharm,mysql,Navicat安装 ...
- day 63 Django基础九之中间件
Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学 ...