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】雅加达的摩天楼的更多相关文章

  1. [APIO 2015] 雅加达的摩天楼

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4070 [算法] 考虑将每个"Doge"向其所能到达的楼连边 直接 ...

  2. 解题:APIO 2015 雅加达的摩天大楼

    题面 分块思想+最短路 发现对于步长小的doge会连出很多边,很容易导致大量的重边,于是对doge们根据步长分块讨论:根据步长建出分层图,然后把步长不超过某个值的doge们连到对应层上的点上,其余的d ...

  3. BZOJ 4070:[APIO2015]雅加达的摩天楼 最短路

    4070: [Apio2015]雅加达的摩天楼 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 464  Solved: 164[Submit][Sta ...

  4. bzoj 4070 [Apio2015]雅加达的摩天楼 Dijkstra+建图

    [Apio2015]雅加达的摩天楼 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 644  Solved: 238[Submit][Status][D ...

  5. 【CTSC 2015】&【APIO 2015】酱油记

    蒟蒻有幸参加了神犇云集的CTSC & APIO 2015,感觉真是被虐成傻逼了……这几天一直没更新博客,今天就来补一下吧~~(不过不是题解……) Day 0 从太原到北京现在坐高铁只需3小时= ...

  6. 【BZOJ4070】[Apio2015]雅加达的摩天楼 set+最短路

    [BZOJ4070][Apio2015]雅加达的摩天楼 Description 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼 ...

  7. [LOJ 2134][UOJ 132][BZOJ 4200][NOI 2015]小园丁与老司机

    [LOJ 2134][UOJ 132][BZOJ 4200][NOI 2015]小园丁与老司机 题意 给定平面上的 \(n\) 个整点 \((x_i,y_i)\), 一共有两个问题. 第一个问题是从原 ...

  8. [LOJ 2133][UOJ 131][BZOJ 4199][NOI 2015]品酒大会

    [LOJ 2133][UOJ 131][BZOJ 4199][NOI 2015]品酒大会 题意 给定一个长度为 \(n\) 的字符串 \(s\), 对于所有 \(r\in[1,n]\) 求出 \(s\ ...

  9. luogu_3645: 雅加达的摩天楼

    雅加达的摩天楼 题意描述: 有\(N\)座摩天楼,从左到右依次编号为\(0\)到\(N-1\). 有\(M\)个信息传递员,编号依次为\(0\)到\(M-1\).编号为i的传递员最初在编号为\(B_i ...

  10. [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT)

    [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT) 题面 小C有一个集合S,里面的元素都是小于质数M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数 ...

随机推荐

  1. Javascript的执行过程详细研究

    下面我们以更形象的示例来说明JavaScript代码在页面中的执行顺序.如果说,JavaScript引擎的工作机制比较深奥是因为它属于底层行为,那么JavaScript代码执行顺序就比较形象了,因为我 ...

  2. 【51NOD】1135 原根

    [题意]给定p,求p的原根g.3<=p<=10^9. [算法]数学 [题解]p-1= p1^a1 * p2^a2 * pk^ak,g是p的原根当且仅当对于所有的pi满足g^[ (p-1)/ ...

  3. 微信小程序开发(四)线程架构和开发步骤

    线程架构 从前面的章节我们可以知道,.js文件是页面逻辑处理层.我们可以按需在app.js和page.js中添加程序在生命周期的每个阶段相应的事件.如在页面的onLoad时进行数据的下载,onShow ...

  4. Spring Boot微服务框架的搭建

    (1)spring boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发 ...

  5. js常见易错点

    原文:http://www.jianshu.com/p/1c77853d4f01 前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函 ...

  6. Discrete Logging(POJ2417 + BSGS)

    题目链接:http://poj.org/problem?id=2417 题目: 题意: 求一个最小的x满足a^x==b(mod p),p为质数. 思路: BSGS板子题,推荐一篇好的BSGS和扩展BS ...

  7. Xcode 获取本地IP

    // // // #define MAXADDRS 32 extern char *ip_names[MAXADDRS]; void InitAddresses(); void GetIPAddres ...

  8. caffe Python API 之Accuracy

    net.acc = caffe.layers.Accuracy(net.fc3,net.label) 输出: layer { name: "acc" type: "Acc ...

  9. Jmeter命令行选项

    示例:jmeter.bat -n -j %tmp%\%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%%time:~ ...

  10. C++——stoi函数

    版权声明:本文系原创,转载请声明出处. 1. 函数原型 , ); , ); 2. 参数说明 str String object with the representation of an integr ...