BZOJ 4070: [Apio2015]雅加达的摩天楼 根号分治+spfa
此题卡Dijkstra...
Code:
- #include <bits/stdc++.h>
- #define N 30005
- #define M 4000000
- #define ll long long
- #define inf 100000000
- #define E 14300000
- #define setIO(s) freopen(s".in","r",stdin)
- using namespace std;
- ll d[M];
- int n,m,block,cnt,edges,s,t;
- int id[N][103],hd[M],to[E],nex[E],val[E],done[M];
- struct Node
- {
- int u;
- ll dis;
- Node(int u=0,ll dis=0):u(u),dis(dis){}
- bool operator<(Node b) const
- {
- return b.dis<dis;
- }
- };
- priority_queue<Node>q;
- void add(int u,int v,int c)
- {
- // ++edges;
- nex[++edges]=hd[u],hd[u]=edges,to[edges]=v,val[edges]=c;
- }
- void Dijkstra()
- {
- memset(d,0x3f,sizeof(d));
- for(d[s]=0,q.push(Node(s,0));!q.empty();)
- {
- Node e=q.top(); q.pop();
- int u=e.u;
- if(done[u]) continue;
- done[u]=1;
- for(int i=hd[u];i;i=nex[i])
- {
- int v=to[i];
- if(d[v]>d[u]+val[i])
- {
- d[v]=d[u]+val[i];
- q.push(Node(v, d[v]));
- }
- }
- }
- }
- int main()
- {
- int i,j,k;
- // setIO("input");
- scanf("%d%d",&n,&m);
- block=min(100,(int)sqrt(n));
- cnt = n + 23;
- for(i=1;i<=block;++i)
- {
- for(j=0;j<i;++j)
- {
- for(k=j;k<n;k+=i)
- {
- id[k][i]=++cnt;
- add(cnt,k,0);
- if(k>=i)
- add(cnt-1,cnt,1), add(cnt,cnt-1,1);
- }
- }
- }
- for(i=1;i<=m;++i)
- {
- int a,b;
- scanf("%d%d",&a,&b);
- if(i==1) s=a;
- if(i==2) t=a;
- if(b<=block)
- add(a, id[a][b], 0);
- else
- {
- int tt=0;
- for(j=a-b;j>=0;j-=b) add(a,j,++tt);
- tt=0;
- for(j=a+b;j<n;j+=b) add(a,j,++tt);
- }
- }
- // printf("%d %d\n",cnt,edges);
- Dijkstra();
- printf("%lld\n",d[t]>=inf?-1:d[t]);
- return 0;
- }
BZOJ 4070: [Apio2015]雅加达的摩天楼 根号分治+spfa的更多相关文章
- 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
挺有趣的分块的题目. 直接暴力建边SPFA貌似是$O(nm)$的. 然后考虑分块,$\sqrt n$一下用虚拟节点辅助连边, 以上的直接暴力连边即可. 然后卡卡时间,卡卡空间. 终于在UOJ上T掉辣. ...
- bzoj 4070: [Apio2015]雅加达的摩天楼【spfa】
明明是个最短路却有网络流一样的神建图= A = 首先要是暴力建图的话最坏有O(nm)条边.所以优化建图. 考虑分块思想,设bs=sqrt(n),对于p大于bs的,直接连边即可,最多有sqrt(n)条, ...
- 4070: [Apio2015]雅加达的摩天楼
Description 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼外,雅加达市没有其他摩天楼. 有 M 只叫做 “do ...
- 【BZOJ4070】[Apio2015]雅加达的摩天楼 set+最短路
[BZOJ4070][Apio2015]雅加达的摩天楼 Description 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼 ...
- 【题解】P3645 [APIO2015]雅加达的摩天楼(分层图最短路)
[题解]P3645 [APIO2015]雅加达的摩天楼(分层图最短路) 感觉分层图是个很灵活的东西 直接连边的话,边数是\(O(n^2)\)的过不去 然而我们有一个优化的办法,可以建一个新图\(G=( ...
- luogu P3645 [APIO2015]雅加达的摩天楼 分块 根号分治
LINK:雅加达的摩天楼 容易想到设\(f_{i,j}\)表示第i个\(doge\)在第j层楼的最小步数. 转移显然是bfs.值得一提的是把初始某层的\(doge\)加入队列 然后转移边权全为1不需要 ...
- [APIO2015]雅加达的摩天楼
Description 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼外,雅加达市没有其他摩天楼. 有 M 只叫做 " ...
随机推荐
- JVM学习(一)Java虚拟机运行时数据区域
一.Java内存区域 1.运行时数据区域 根据<Java 虚拟机规范(Java SE 7 版)>规定,Java 虚拟机所管理的内存包括以下几个运行时数据区域: 1.1 程序计数器 程序计数 ...
- ubuntu 忘记密码如何 修改密码
ubuntu 忘记密码如何 修改密码 这个链接讲的很不错 https://blog.csdn.net/zd147896325/article/details/81664558 本来我只是玩一玩,但是我 ...
- AC自动机fail树上dfs序建线段树+动态memset清空
题意:http://acm.hdu.edu.cn/showproblem.php?pid=4117 思路:https://blog.csdn.net/u013306830/article/detail ...
- nginx浏览器开启密码验证
如果我们在 nginx 下搭建了一些站点,但是由于站点内容或者流量的关系,我们并不想让所有人都能正常访问,那么我们可以设置访问认证.只有让用户输入正确的用户名和密码才能正常访问.效果如下: 在 ngi ...
- java对象序列化并存储到文件中
● 如何将一个Java对象序列化到文件里 使用输入输出流,,一个是ObjectOutputStream 对象,ObjectOutputStream 负责向指定的流中写入序列化的对象.当从文件中读取序列 ...
- react 管理平台
https://open.vbill.cn/react-admin/ 开源中国:https://gitee.com/sxfad/react-admin.git GitHub:https://githu ...
- SQLServer · 最佳实践 · 如何将SQL Server 2012降级到2008 R2-博客-云栖社区-阿里云
迁移须知 使用SQLSERVER 2012的特性在SQL 2008 R2不支持,比如新的分页方式 此迁移操作手册适用于MSSQL2012到MSSQL2008R2的迁移 迁移使用微软提供的脚本生成和导入 ...
- 为Vim 添加vimgdb支持
为Vim 添加vimgdb支持 1. 下载最新的vim74的源码包 wget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2 2.下载vimgdb- ...
- 在windows部署service
首先,需要在环境变量的path中加入Install Util的路径: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 注意这里的Framework\v2.0 ...
- ORACLE_笔记_练习题目
一.plsql用法网址及时复习 extract()函数----用于截取年.月.日.时.分.秒 https://www.cnblogs.com/xqzt/p/4477239.html case when ...