LINK:雅加达的摩天楼 容易想到设\(f_{i,j}\)表示第i个\(doge\)在第j层楼的最小步数. 转移显然是bfs.值得一提的是把初始某层的\(doge\)加入队列 然后转移边权全为1不需要 双端队列的bfs. 复杂度为状态数量\(n\cdot m\) 可以发现 可能有两个\(doge\)跳在同一层楼 且 跳跃能力相同 显然其中一个一定没用 可以进行一些小优化 将状态改写成\(f_{i,j}\)到达第i层楼跳跃能力为j的最小步数. 复杂度\(n\cdot sqrt n\) 证明和另外一…
luogu 暴力? 暴力! 这个题有点像最短路,所以设\(f_{i,j}\)表示在\(i\)号楼,当前\(doge\)跳跃能力为\(j\)的最短步数,转移要么跳一步到\(f_{i+j,j}\)和\(f_{i-j,j}\),要么换到别的\(doge\),转移到\(f_{i,k}\) 这看似有\(n^2\)的状态,实际上状态数只有\(n\sqrt n\).因为当\(p> \sqrt n\)时,一个\(doge\)只能跳到\(\sqrt n\)个不同的点,这部分为\(m\sqrt n\);当\(p\l…
[题解]P3645 [APIO2015]雅加达的摩天楼(分层图最短路) 感觉分层图是个很灵活的东西 直接连边的话,边数是\(O(n^2)\)的过不去 然而我们有一个优化的办法,可以建一个新图\(G=(V,E)\)其中\(V\)和原图\(V\)一一对应且连接一个\(0\)边,此外每个点向V中的\(i+-d\)连边. 类似网络流的办法瞎建就行了. 过不了uoj //@winlere #include<iostream> #include<cstdio> #include<cstr…
传送门 这最短路的建图怎么和网络流一样玄学…… 一个最朴素的想法是从每一个点向它能到达的所有点连边,边权为跳的次数,然后跑最短路(然而边数是$O(n^2)$除非自创复杂度比spfa和dijkstra还有优秀的做法否则根本过不了) 那么考虑一下分块 把每一座建筑拆成$O(\sqrt{n})$层,第$i$层代表在这一层只能每一步跳$i$个建筑,然后这一层每一个建筑向它能到达的点连双向边 然后每一层每一个建筑向底层连边,代表如果这里有其他狗就可以更换跳的步数 然后考虑每一只狗,如果它每一步跳的步数小于…
题目描述 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N − 1.除了这 NN 座摩天楼外,雅加达市没有其他摩天楼. 有 M 只叫做 “doge” 的神秘生物在雅加达市居住,它们的编号依次是 0 到 M − 1.编号为 i 的 doge 最初居住于编号为 Bi​ 的摩天楼.每只 doge 都有一种神秘的力量,使它们能够在摩天楼之间跳跃,编号为 i 的 doge 的跳跃能力为 Pi​ (Pi​>0). 在一次跳跃中,位于摩天楼 b 而跳跃能力为 p …
挺有趣的分块的题目. 直接暴力建边SPFA貌似是$O(nm)$的. 然后考虑分块,$\sqrt n$一下用虚拟节点辅助连边, 以上的直接暴力连边即可. 然后卡卡时间,卡卡空间. 终于在UOJ上T掉辣. 遂弃疗 #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include…
题目链接 Solution 分块+\(Dijkstra\). 难点在于建边,很明显 \(O(n^2)\) 建边会挂一堆 . 那么考虑一下, \(n^2\) 建边多余的是哪些东西 \(???\) 很显然是冗杂的边,即两个点在之前已经可以互达了,但是在这一次仍然又连接一遍. 所以我们对于 \(n\) 个点都开 \(sqrt(n)\) 个辅助点.代表第 \(i\) 个点可以走出 \(j\) . 辅助点之间也需要与相邻的连上一条边权为 \(1\) 的边. 然后对于 \(m\) 个点分类讨论. 如果 \(…
正解:最短路 解题报告: 传送门$QwQ$ 考虑暴力连边,发现最多有$n^2$条边.于是考虑分块 对于长度$p_i$小于等于$\sqrt(n)$的边,建立子图$d=p_i$.说下关于子图$d$的定义?指的由$n$个点构成,每个点$j$都连向$j-d$和$j+d$的图.然后对于$p_i$对应的点$b_i$,指向图中的自己就行$QwQ$.因为这样的边数量不超过$\sqrt(n)$,所以边数少于$n\sqrt(n)$ 对于长度$p_i$大于$\sqrt(n)$的边,直接暴力连边,因为长度大于$\sqr…
暴力连边可以每个bi向i+kdi连边权是k的边. 考虑这样的优化: 然后发现显然是不行的,因为可能还没有走到一个dog的建筑物就走了这个dog的边. 然后就有一个很妙的方法--建一个新的图,和原图分开,这样就没有问题了. 左边这一个是原图,连向原图的点边是可以走的,但是原图的点可以走出去当且仅当这个点上有一个d=目标图d的dog 可以这样建\(\sqrt n\)个图,剩下的图在原图上暴力建,边数都\(<\sqrt n\) 所以最后点数边数都是\(n\sqrt n\)的 注意不用把图建出来,在跑的…
[Apio2015]雅加达的摩天楼 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 644  Solved: 238[Submit][Status][Discuss] Description 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼外,雅加达市没有其他摩天楼.   有 M 只叫做 “doge” 的神秘生物在雅加达市居住,它们的编号依次是 0 到 M−1.编号为 i 的…