NOI2025_机器人
发表于|更新于|题解
|总字数:518|阅读时长:2分钟|浏览量:
不是,近 5 年 NOI 从来没考过绿吧,不会吧?
形式化题面如下:
给定一个有向图,包含n 个节点和m 条有向边。边有长度。对于每个节点x,其出边被编号为1→dx(dx 是出边数量)。从1 号点出发,初始有一个变量p=1,按以下规则移动:
- 若当前位于节点x 且p≤dx,则走x 的第p 条边,移动到相邻节点y。花费为边的长度。
- 修改参数p:
- 若p<k,则令p←p+1,花费为vp。
- 若p>1,则令p←p−1,花费为wp。
求1→i 的最小花费,若无法到达输出−1。
一眼分层图,题目转化为建k 层的有向图,每次跳不同层要花费规则上指定的代价,求单源最短路跑 Dijkstra。但是空间复杂度是O(nk),且时间复杂度为O(nklognk),无法通过。
我们设分层图状态为(u,p) 表示在第u 点,参数为p。
考虑优化,首先一个关键观察就是当dx<p 的时候是没有任何卵用的,(u,p) 是无效状态。我们没必要建这么多图,考虑每一层就建dx 层就可以啦。
接下来还有一个很难受的过程就是修改参数,考虑这个怎么优化,花费和p 有关,一个不难观察到的地方每次增减量是1,考虑前缀和优化修改参数这一过程,这样复杂度从O(k)→O(1)。这一部分我们可以通过 map 或哈希表实现,时间复杂度O(nlognlogk)→O(nlogn)。
代码数据出来补一下?
相关推荐
2025-08-10
2025-8-10提高组模拟赛
被诈骗的一集。 话说你是打得好才记吗,下次打的不好更应该记录反思的好吧。 T1 CF1295D Same GCDs - 洛谷 暴力肯定是不行的,考虑如何对这个 xxx 计数,考虑算术唯一分解定理,对于 gcd\gcdgcd 来说就是所有质数上指数取 min\minmin,那么对 gcd(a+x,m)=gcd(a,m)\gcd(a+x,m)=\gcd(a,m)gcd(a+x,m)=gcd(a,m) 可以把 xxx 以质因数分解的形式看待的话,就是加上 xxx 之后取 min\minmin 的值不变,可以分析出几个性质: xxx 不会添加新的质数,质数取集只在 a,ma,ma,m 之间。 xxx 不会改变 aaa 取到 min\minmin 指数的质数贡献。 那么有 gcd(x,m)=gcd(a,m)\gcd(x,m)=\gcd(a,m)gcd(x,m)=gcd(a,m),除掉 gcd(a,m)\gcd(a,m)gcd(a,m),gcd(xgcd(a,m),mgcd(a,m))=1\gcd(\frac{x}{\gcd(a,m)},\frac{m}{\gc...
2025-08-16
2025.8.16模拟赛
T1 8 数码问题简化版,O(7!)O(7!)O(7!) 爆搜 BFS,没了。 T2 ∑i=0m+1(n+1i)=∑i=0m(ni)+(n−1i)\sum\limits_{i=0}^{m+1}\binom{n+1}{i}=\sum\limits_{i=0}^{m}\binom{n}{i}+\binom{n-1}{i} i=0∑m+1(in+1)=i=0∑m(in)+(in−1) ∑i=0m+1(ni)=∑i=0m(ni)+(nm+1)\sum\limits_{i=0}^{m+1}\binom{n}{i}=\sum\limits_{i=0}^m \binom{n}{i}+\binom{n}{m+1} i=0∑m+1(in)=i=0∑m(in)+(m+1n) 时间复杂度为 O(n)O(n)O(n),瓶颈在预处理组合数。 T3 Subtask 1 暴力枚举排列,逆序对也可以暴力统计,时间复杂度 O(7!)O(7!)O(7!)。 Subtask 2 注意到暴力枚举排列不行,但是注意到这个只和排列奇偶性有关。本质上就是求行列式。具体的就是照题目的把矩阵 [...
2025-08-19
2025.8.19模拟赛
T1 字符串基础练习,时间复杂度 O(nL)O(nL)O(nL)。 T2 BFS 洪水填充,但是如果你直接暴力枚举一个点进行拓展的话显然不对。我们可以通过多源 BFS 来做到 O(nm)O(nm)O(nm)。 注意这里必须 O(nm)O(nm)O(nm),记得以后一定要计算复杂度,不然会被卡常。 T3 更唐的做法: 观察一组合法的三元组的格式是怎样的,显然这三元组因为在树上,故必然存在一个点使得到这三个点距离相等(距离不等反而赢了)。如果不认为显然的请列方程计算,你会发现有解情况唯一剩下的都有环。 那么我们可以枚举交点,把它提起来作为根,然后我们枚举距离 ttt,对每一个孩子的子树求其子树内有多少距离根节点为 ttt 的点,记一个孩子子树的合法点个数为 aia_{i}ai。 那么答案就是三个不同子树的点进行配对 ∑i≠j≠kaiajak\sum\limits_{i\neq j\neq k} a_{i}a_{j}a_{k}i=j=k∑aiajak。不难发现上述过程光枚举就花了 O(n2)O(n^2)O(n2),这个玩意还是 O(n3)O(n^3)O(n3) 的...
2025-08-24
2025.8.24模拟赛
省流:被诈骗的一集 T1 诈骗题。 本题的性质只能从答案入手,很难观察到答案不超过 333,具体的就是令 i=n−2,j=n−1i=n-2,j=n-1i=n−2,j=n−1。那么由于 LCP 肯定不超过长度,所以答案构造 ≤3\le 3≤3。 一个暴力的想法就是暴力枚举两个指针 i,ji,ji,j 来去判断,但是这是 O(n2)O(n^2)O(n2) 的,不过有了答案 ≤3\le 3≤3 我们思考具体取值。 考虑固定 iii。首先 j∈[i+1,i+3]j\in[i+1,i+3]j∈[i+1,i+3] 的枚举是肯定需要的,复杂度可以接受。但是一但到了 i+4i+4i+4 之后呢?结论是直接取到 j=n−1j=n-1j=n−1 即可,答案还是因为答案不超过 3,可以让 LCP(a,c)+LCP(b,c)=0LCP(a,c)+LCP(b,c)=0LCP(a,c)+LCP(b,c)=0 当且仅当存在 cj≠a1∧cj≠bic_j\neq a_1\land c_j\neq b_icj=a1∧cj=bi。否则:如果 a1≠bia_1\neq b_ia1=bi,我们选 j...
2025-08-14
20250814模拟赛
前言 省流:300 分。 T1 考虑 DP,设 f(i,0/1/2)f(i,0/1/2)f(i,0/1/2) 表示处理到第 iii 个数,当前是往左,不动,往右,方案是否合法,转移如下: f[i][0]=f[i−1][0]⋅[xi−xi−1=1]+f[i−1][1]⋅[xi−(xi−1−1)=1]+f[i−1][2]⋅[xi−(xi−1+1)=1],f[i][1]=f[i−1][0]⋅[xi−1−xi−1=1]+f[i−1][1]⋅[xi−1−(xi−1−1)=1]+f[i−1][2]⋅[xi−1−(xi−1+1)=1],f[i][2]=f[i−1][0]⋅[xi+1−xi−1=1]+f[i−1][1]⋅[xi+1−(xi−1−1)=1]+f[i−1][2]⋅[xi+1−(xi−1+1)=1],\begin{aligned} f[i][0] &= f[i-1][0] \cdot [x_i - x_{i-1} = 1] + f[i-1][1] \cdot [x_i - (x_{i-1} - 1) = 1] + f[i-1][2] \c...
2025-06-10
ABC236G题解
推销自己的矩阵优化文章:矩阵快速幂优化DP 注意到点数及其小,边数也算小,而 LLL 极大,有一股浓烈的矩阵快速幂优化的味道。 首先这个问题肯定是一个 DP 的题,我们有一个暴力的想法,我们对于每一个操作,利用 Floyd 的 DP 思想,邻接矩表示图两点之间经过 111 条边的路径数量这个特点,对于每一个操作我们更新邻接矩阵,让后在上面跑矩阵快速幂,幂 LLL 次后的邻接矩阵代表的就是经过 LLL 条边的信息,一次次更新答案判断可达性即可,时间复杂度 O(Tn3logL)O(T n^3 \log L)O(Tn3logL),不能通过。 我们考虑如何优化,根据题意,每一次操作只会添加一条边,而要求的是求经过边中操作编号更靠后(也就是更大)的边。我们可以将这个操作编号绑到边权上,那么实际上我们就是要对经过的边的边权取 max\maxmax 操作。 那么我们有一个显而易见的状态,设 f(i,j,k)f(i,j,k)f(i,j,k) 表示在从 iii 到 jjj 节点,经过 kkk 条边的最大边权,转移如下: f(i,j,k)=min{maxp=1nf(i,p,k−1)+w(p...
评论
公告
👋🏻我是PPM,一个热爱编程和信息学竞赛的高中生,喜欢分享做题经验。本博客中所有 latex 公式均可以选中后复制哦😊
❓有问题欢迎提问,确保内容有意义。如需联系我,欢迎通过邮箱联系我!📧
嗷嗷!热烈欢迎🤪!来自
的朋友,你好呀!
你的网络IP为:***.***.***.***
❓有问题欢迎提问,确保内容有意义。如需联系我,欢迎通过邮箱联系我!📧
嗷嗷!热烈欢迎🤪!来自
的朋友,你好呀!
你的网络IP为:***.***.***.***