【BZOJ 4070】【APIO 2015】雅加达的摩天楼
http://www.lydsy.com/JudgeOnline/problem.php?id=4070
分块建图。
对每个\(P_i\)分类讨论,\(P_i>\sqrt N\)则直接连边,边数少于\(\sqrt N\)。
对每个横跨长度\(\leq\sqrt N\)的边,建一条“滑轨”,当\(P_i\leq\sqrt N\)时则把这个点送到滑轨上,可以到任何一个位置下来。一共要建\(\sqrt N\)条滑轨。
最后跑最短路就可以了,uoj上死活过不了hack数据,貌似过了的都没有建图?
时间复杂度\(O(n\sqrt n)\),如果spfa是\(O(m)\)的话。
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 30003;
const int B = 113;
const int Qtot = N * B - 1;
int nxt[N * B * 5], to[N * B * 5], w[N * B * 5];
int point[N * B], cnt = 0, n, m, S[N], P[N];
void ins(int u, int v, int W) {
nxt[++cnt] = point[u]; to[cnt] = v; w[cnt] = W; point[u] = cnt;
}
bool inq[N * B];
int dist[N * B], tot;
queue <int> qu;
int spfa(int s, int t) {
memset(dist, 127, sizeof(int) * (tot + 1));
dist[s] = 0;
int u, v, di; qu.push(s); inq[s] = true;
while (!qu.empty()) {
inq[u = qu.front()] = false; qu.pop();
for (int i = point[u]; i; i = nxt[i]) {
v = to[i];
if ((di = dist[u] + w[i]) < dist[v]) {
dist[v] = di;
if (!inq[v]) {
inq[v] = true;
qu.push(v);
}
}
}
}
return dist[t] == dist[0] ? -1 : dist[t];
}
int main() {
scanf("%d%d", &n, &m);
int Si, Pi; tot = B * n;
int tt = n;
for (int i = 1; i < B; ++i)
for (int j = 1; j <= n; ++j)
ins(++tt, j, 0);
for (int i = 1; i < B; ++i)
for (int j = 1; j <= i; ++j) {
int tmp = j + i, st = i * n;
while (tmp <= n) {
ins(st + tmp - i, st + tmp, 1);
ins(st + tmp, st + tmp - i, 1);
tmp += i;
}
}
for (int i = 1; i <= m; ++i) {
scanf("%d%d", &Si, &Pi);
S[i] = ++Si; P[i] = Pi;
if (Pi >= B) {
for (int tmp = Si + Pi, j = 1; tmp <= n; tmp += Pi, ++j)
ins(Si, tmp, j);
for (int tmp = Si - Pi, j = 1; tmp >= 1; tmp -= Pi, ++j)
ins(Si, tmp, j);
} else
ins(Si, Pi * n + Si, 0);
}
printf("%d\n", spfa(S[1], S[2]));
return 0;
}
【BZOJ 4070】【APIO 2015】雅加达的摩天楼的更多相关文章
- [APIO 2015] 雅加达的摩天楼
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4070 [算法] 考虑将每个"Doge"向其所能到达的楼连边 直接 ...
- 解题:APIO 2015 雅加达的摩天大楼
题面 分块思想+最短路 发现对于步长小的doge会连出很多边,很容易导致大量的重边,于是对doge们根据步长分块讨论:根据步长建出分层图,然后把步长不超过某个值的doge们连到对应层上的点上,其余的d ...
- 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 ...
- 【CTSC 2015】&【APIO 2015】酱油记
蒟蒻有幸参加了神犇云集的CTSC & APIO 2015,感觉真是被虐成傻逼了……这几天一直没更新博客,今天就来补一下吧~~(不过不是题解……) Day 0 从太原到北京现在坐高铁只需3小时= ...
- 【BZOJ4070】[Apio2015]雅加达的摩天楼 set+最短路
[BZOJ4070][Apio2015]雅加达的摩天楼 Description 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼 ...
- [LOJ 2134][UOJ 132][BZOJ 4200][NOI 2015]小园丁与老司机
[LOJ 2134][UOJ 132][BZOJ 4200][NOI 2015]小园丁与老司机 题意 给定平面上的 \(n\) 个整点 \((x_i,y_i)\), 一共有两个问题. 第一个问题是从原 ...
- [LOJ 2133][UOJ 131][BZOJ 4199][NOI 2015]品酒大会
[LOJ 2133][UOJ 131][BZOJ 4199][NOI 2015]品酒大会 题意 给定一个长度为 \(n\) 的字符串 \(s\), 对于所有 \(r\in[1,n]\) 求出 \(s\ ...
- luogu_3645: 雅加达的摩天楼
雅加达的摩天楼 题意描述: 有\(N\)座摩天楼,从左到右依次编号为\(0\)到\(N-1\). 有\(M\)个信息传递员,编号依次为\(0\)到\(M-1\).编号为i的传递员最初在编号为\(B_i ...
- [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT)
[BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT) 题面 小C有一个集合S,里面的元素都是小于质数M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数 ...
随机推荐
- JavaScript 字符串操作:substring, substr, slice
在 JavaScript 中,对于字符串的操作有 substring, substr, slice 等好多个内置函数,这里给大家推荐一篇介绍 substring, substr, slice 三者区别 ...
- 引用类型 ( 对象定义 )——Date 类型
本文地址:http://www.cnblogs.com/veinyin/p/7607743.html 1 创建日期对象 var date = new Date(); 2 可以给日期对象传值 2.1 ...
- 在iOS开发中如何播放视频
技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong 如何播放视频 •iOS提供了叫做MPMo ...
- MQTT协议及推送服务
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建 ...
- JAVA 企业培训
- Oracle笔记之序列(Sequence)
Oracle中序列是一种数据对象,可以视为一个等差数列,我们自增就是一个遍历这个数列的过程,可以取当前值,也可以将当前值自加n后返回,Sequence与表没有太大的关系,有的时候如果表的主键是数值类型 ...
- php常用函数——数组函数
php常用函数——数组函数
- 004_Gradle 笔记——Java构建入门
Gradle是一个通用的构建工具,通过它的构建脚本你可以构建任何你想要实现的东西,不过前提是你需要先写好构建脚本的代码.而大部分的项目,它 们的构建流程基本是一样的,我们不必为每一个工程都编写它的构建 ...
- CSU 1412 Line and Circles
原题链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1412 题目要求判断是否有一条直线可以穿过所有的圆. 做法:把所有圆心做一次凸包,然后判断 ...
- MVC – 15.路由机制
15.1.路由检测插件 - RouteDebug 15.2.路由约束 15.3.命名路由 15.4.验证码 15.5.ASP.NET MVC 与 三层架构 15.6.Area区域 15.6.1.尝试将 ...