题目描述:

qwq…

题目分析:

其实就是个最短路啊,然后发现建的边最多会有 N2 N 2 N^2条…
所以我们考虑用分块的思想来优化建图。
Pi>sqrt(n),暴力加入每一条边,每次最多sqrt(n)条边。
Pi≤sqrt(n),对于每个点添加sqrt(n)个辅助点,这里可以理解成一栋楼有许多层,每一层一步能走的范围都不同,然后每一层分别连边,每一层到楼底连边。对于一只doge,从楼底到Pi对应的楼层连边。边数是O(n*sqrt(n))的。
跑一下SPFA就可以了…

题目链接:

Luogu 3645

Ac 代码:

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <queue>
#include <cmath>
#include <cstring>
const int maxm=30005*800;
int cnt;
int n,m,block;
int head[maxm],net[maxm],cost[maxm],to[maxm];
int dis[maxm],vis[maxm];
std::queue <int> dl;
inline void addedge(int u,int v,int c)
{cnt++;to[cnt]=v,cost[cnt]=c,net[cnt]=head[u],head[u]=cnt;
}
inline int SPFA(int s,int t)
{memset(dis,127/3,sizeof(dis));dl.push(s),vis[s]=1;dis[s]=0;while(!dl.empty()){int now=dl.front();dl.pop();vis[now]=0;for(int i=head[now];i;i=net[i])if(dis[to[i]]>dis[now]+cost[i]){dis[to[i]]=dis[now]+cost[i];if(!vis[to[i]]) vis[to[i]]=1,dl.push(to[i]);}}return dis[t]==dis[0]?-1:dis[t];
}
int main()
{scanf("%d%d",&n,&m);block=std::min((int)std::sqrt(n),100);for(int i=1;i<=block;i++)for(int j=1;j<=n;j++){addedge(i*n+j,j,0);if(j+i<=n) addedge(i*n+j,i*n+j+i,1),addedge(i*n+j+i,i*n+j,1);}int s,t;for(int i=1;i<=m;i++){int b,p;scanf("%d%d",&b,&p);b++;if(i==1) s=b;if(i==2) t=b;if(p>block){for(int j=1;b+j*p<=n;j++) addedge(b,b+j*p,j);for(int j=1;b-j*p>=1;j++) addedge(b,b-j*p,j); }else addedge(b,b+p*n,0);}printf("%d\n",SPFA(s,t));return 0;
}

[AOIP 2015] 雅加达的摩天楼相关推荐

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

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

  2. Luogu 3645 [APIO 2015] 雅加达的摩天楼

    传送门 思路 正解 参考代码 Update 传送门 思路   唉,我太弱了,我都看出来要分块了,就是做不来.不过终于把题读对了.   先来看子任务三怎么做.显然可以有一个 O(m2) O ( m 2 ...

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

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

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

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

  5. bzoj4070【APIO2015】雅加达的摩天楼

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

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

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

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

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

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

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

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

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

最新文章

  1. 面试官最讨厌的三种求职者
  2. R语言构建xgboost模型并评估模型(测试集、训练集每一轮):误分类率指标(misclassification rate)、logloss
  3. SEO小程:医院网站优化之如何分析竞争对手的网站
  4. unit2--unit4单元文档
  5. sulime text 常用快捷键总结
  6. getch, getche, getchar 转
  7. 移除 ZooKeeper 的 kafka 2.8 ,更快了
  8. 前端学习(1943)vue之电商管理系统电商系统之通过路由加载商品分类
  9. 【POJ - 2195】Going Home(二分图最优匹配,费用流 或 KM)
  10. python软件设计数据分析统计服_Python 和 R 数据分析/挖掘工具互查
  11. python下载教程-Python 如何入门?附Python教程下载
  12. 7.jenkins 发布邮件
  13. Linux RTC驱动模型分析之rtc-proc.c
  14. matla图像处理基本操作
  15. oracle04052,案例学习Oracle错误:ORA-04052
  16. 接入支付宝电脑网站支付实现JAVA版
  17. keil 对于 ERROR: FILE DOES NOT EXIST错误的解决办法
  18. 你知道“晚安”是什么意思么?
  19. 从海尔的组织结构再造看企业的组织结构
  20. 摄影软文文案有哪些类型?

热门文章

  1. 【单例设计模式】懒汉式跟饿汉式的区别
  2. 我为工作代言,今为工作奉献
  3. 牛逼,不用付费就能导出虾米数据和下载音乐 ?
  4. 二进制安装Kubernetes(k8s) v1.24.3 IPv4/IPv6双栈
  5. 最新《医学图像分割》综述,详述六大类100多个算法
  6. FTP服务器创建及设置
  7. 无痕埋点的设计与实现
  8. Unity 之Vector3的球形插值Slerp详解
  9. 一文了解科创板第一批IPO受理企业详情
  10. 中国最有钱大学排行,北大只能排第三