6 月做题记录

2085.
4K
1 | _______ |
P11831 [省选联考 2025] 追忆/recall Ult
题目大意
给定一个
你需要进行
:交换 和 ; :交换 和 ; :你需要输出满足以下两个条件的点 中 的最大值,若不存在满足条件的点则输出 : 。 - 图
中存在一条 到 的有向路径,即存在整数 与 个结点 ,满足 , ,且对于所有 ,图 中存在从 指向 的有向边。特别地,图 中总是存在一条 到 的有向路径。
注:本题有
对于所有测试点,
, , ,
请注意本题特别的时空限制。
解答
考完了省选后三个月才把这道题补了/ll,还是我太菜了。
DAG 图的可达性问题(所有边的
先考虑没有修改的情况。
我们可以开
因为暴力区间赋
然后是可达性:直接全局跑可达性空间肯定是会炸的,所以这里还是记录一个
最后就是求 _Find_First()
和 _Find_next()
遍历即可。
现在有了修改操作。考虑依然是每
这
CF1286F Harry The Potter 3100
题目大意
假设有一个包含
可以进行的操作有:
- 任意选定两个数
和 ,然后把 减去 。(注意, 可以是负数) - 任意选定三个数
和 ,然后把 减去 ,把 减去 。
请输出最少的操作次数。
对于
解答
我们可以把 2 操作
我们定每一棵树最终一定是可以变为全
此时若要合法,那么奇数深度的点权和必须等于偶数深度的点权和。
现在加入
于是我们可以判定一个点集
我们令
0606T2 / 0610T2 operation
题目大意
给定一个质数
- 给定
,将 修改为 。 - 给定
,将 修改为 。
其中
你可以以任意顺序执行上面的
解答
lxs 牛完了(这里指 6 号的题是他搬的),我突然感觉以前的大粪吃的都很香了。
首先,显然的,可以先把第一种操作集合起来,再把第二种操作集合起来,然后跑 bitset。暴力乘法跑 bitset 是不可取的,所以这里使用把乘法转为加法的方式。
那么我们要把乘法转为加法,就要使用到原根。原根定义为
求得原根之后,就相当于是要做一个背包了。因为原来是个环,所以我们要断环为链,将长为
那么因为修改的位置最多只有
P11369 [Ynoi] 弥留之国的爱丽丝 Ult
题目大意
给你
你需要进行
1 k
:将第
2 u v
:询问是否能从
满足
解答
这是一个有向图,很明显强于 DAG 可达性,所以依然考虑
我们以每
之后就是老套路,先抛开关键边求可达性。具体来说就是先抛开关键边缩点,缩点后每一个关键点可以到达哪些关键点,这个用
对于操作 1 修改:修改 vis &(g[front] | f[front])
。然后 bitset 遍历所有的
然后找一个可以平衡复杂度的
Diamond Dust 真好听。
P5311 [Ynoi] 成都七中 Ult
题目大意
给你一棵
查询操作给定参数
将树中编号在
每次查询操作独立。
对于
解答
这里介绍一个常用的 Trick:就是一个连通块肯定存在一个属于这个连通块的点
所以我们可以对原树进行点分治。因为很明显
然后现在我们就要求,对于分治中心
我们可以维护其轮廓线,然后扫描线加矩形:
因为一个矩形并肯定是这样式的,设它是
注意做完一个询问之后不要再换一个分治中心继续做该询问!因为我们要的分治中心一定能包含这个连通块的所有点,也就是它的深度最浅,所以只有唯一一个!
Potplayer | FLAC | [1/115] Divide et impera! - BlackY.flac
(分治是什么歌(((((((((
支配集(支配点对)合集
P7880 [Ynoi] rldcot Mas
题目大意
给定一棵
定义
共
对于
解答
一道支配点对 + 扫描线维护的板子题。
首先把所有点的
考虑暴力怎么搞。枚举这个
管的最宽就说明 set
来 insert
进这个 set
里面,就可以保证这个
我们维护一个 push
进
但是暴力这个方法很明显是会死的,所以我们使用树上启发式合并(小的并到大的上)就不会有错了!
P8528 [Ynoi] 铃原露露 Ult
题目大意
给定一棵有根树,顶点编号为
共
以上所有数值为整数。
对于
解答
因为所有操作都是
因为还是区间编号连续问题,所以考虑支配对。
合法的点对有多少个不好求,那么我们可以先求出询问
我们还是钦定一个 LCA
我们分情况讨论:若
然后就要求
最后,还要提醒的就是所有
P9062 [Ynoi] Adaptive Hsearch & Lsearch Ult
题目大意
有
有
对于
解答
这道题是平面最近点对的区间询问版。很显然的,首先可以对右端点进行扫描线,维护左端点的答案。
然后就是这道题最核心的 Trick:考虑对整个平面做一个倍增网格分块,我们这里令底数
我们可以一层一层的维护。假设现在的最小单位是边长为
然后从左往右扫每一个点。我们扫到点
是不是觉得,到后面点越来越多,每个点连的点数会变为
那么算一下关键点数:对于每一层,每一个正方形里面最多可以存
看着比较大,所以不能再使用树状数组来
需要注意的一点是,这是 Ynoi。为了卡常,这里的给正方形标号的操作不要用 map
或者 umap
状物,自己手写个哈希可以卡常。
回滚莫队合集
P5906 回滚莫队模板 Mas
题目大意
给定一个长度为
序列中两个元素的间隔距离指的是两个元素下标差的绝对值。
对于
解答
我们发现,加点的时候是好维护的,就是维护当前每一种颜色的坐标的
这种莫队又叫不加莫队或者不删莫队。其实就是指在加操作和删操作两个里面有一个好维护,但是另一个不好维护,并且可以撤销,就可以使用。算法的具体流程是这样的:
- 首先将所有询问按照以下方式排序:
- 若
和 不在同一块内,则按照 排序。 - 否则,按照
排序。
- 若
- 处理询问,记录当前维护的
和上一次访问的块的编号。每个询问会有以下情况: - 若当前询问的
在同一块,则暴力解决。 - 否则,当询问的
的所在块和上一次访问的块的编号不一样,则撤销之前 的影响,并让维护的 变为当前询问的 所处的块的右端点 , 变为当前块的右端点。 - 当维护的
小于询问的 时,正常维护。 - 当维护的
大于询问的 时,先正常维护,记录答案,再一步步撤销 的操作使 变为当前块的右端点 。
- 若当前询问的
这种算法的话,令块长为
这道题的话,就根据上面的步骤来就可以了。
P8078 秃子酋长 Mas
题目大意
TL:5s,ML:512MB
给一个长为
对于
解答
发现每一次修改只会影响前缀、或者后缀,所以使用平常的做法可以做到
发现加不好加,但是删好删。我们可以预处理每一个位置的前缀和后缀,然后删点的话就修改前缀的
P5386 数字游戏 Ult
题目大意
TL:3s ~ 7s,ML:125MB
给定一个
; - 且对于任意
,有 。
解答
有
发现后者比较好做,因为原数组是一个排列,所以你新加一个值就只会有一个位置被激活。你激活了这个位置就可以同时连接左、右两边的连续的被激活的段。我们只需要维护这个位置是不是开头或者结尾,如果是那么这个区间长度是多少。因为一个被激活的块连接的一定是开头或者结尾,所以如果这个位置没有值那就一定没被激活。并且根据这个还可以推出开头的连续段长度和结尾的连续段长度。这个对求整块有效。
求散块就使用一个
这样就可以实现激活一个点
长链剖分合集
众所周知的,树链剖分的方法是相似的,重链剖分就是维护重儿子,长链剖分就是维护长儿子。
长链剖分一般解决的是树上 DP 或是树上计数问题。
长链剖分可以用来维护树上 DP 或是树上计数问题利用了树上的最长链最长的性质,将短儿子合并到长儿子上。然后继承长儿子信息。
P5903 模板 树上 K 级祖先 Exp
题目大意
TL:3s,ML:500MB
给定一棵
有
强制在线。
解答
这道题利用了一个性质,就是任意一个点的
那么该如何利用这个性质呢?我们可以将
然后就可以分情况讨论:现在的
为了好维护这个
具体来说,我是这么维护的:在 DFS2 操作的时候同步赋指针。(其实 DFN 序也可作指针。)
1 | void initst(){ |
CF1009F Dominant Indices 2300
题目大意
TL:4.5s,ML:500MB
给定一棵以
对于每个点,求一个最小的
解答
这道题就是利用了长链剖分维护答案的方式:继承长儿子信息、合并短儿子信息。
我们维护
1 | int *dp[N], val[N], *cur; |
然后我们开始遍历点。还是按照 DFS 的方式遍历,先解决儿子,再合并儿子信息。
对于合并长儿子,这道题不需要,因为你向上移动一条边就相当于是平移了指针,这里的
对于合并短儿子,设现在遍历的短儿子为
对于维护答案,我们维护
最后,记录答案,返回答案。
粘个代码作为模板 ^=ω=^
1 |
|
P5904 HOT-Hotels Mas & 双倍经验弱化版 Exp
题目大意
TL:1s,ML:500MB
给出一棵有
解答
先考虑弱化版。注意到因为
但是刚刚是弱化版,现在要做长链剖分,就不能枚举
我们设
我们先考虑第一种情况:我们令
那么我们就可以开始设计要维护的东西:我们记
然后第一种情况就好合并了。枚举
然后就是维护
注意这里的
1 | void dfs2(int x, int topx){ |
P7581 路径权值 Mas
题目大意
TL:2s,ML:256MB
给你一棵
解答
对于两两之间距离之和,我们可以维护之前的
那么这个时候就要维护每一个点的
但是这个时候有个问题,就是没有办法继承重儿子的信息,因为这个时候相当于就是让你全局加。(其实这个有办法维护,只是当时我没有想出来)所以我一改前面的维护
P3899 更为厉害 Exp
题目大意
TL:2s,ML:512MB
设
- 设
和 为 中的两个不同节点。如果 是 的祖先,那么称“ 比 更为厉害”。 - 设
和 为 中的两个不同节点。如果 与 在树上的距离不超过某个给定常数 ,那么称“ 与 彼此彼此”。
给定一棵
你需要回答
为 中三个不同的点,且 为 号节点; 和 都比 更为厉害; 和 彼此彼此。这里彼此彼此中的常数为给定的 。
解答
首先,当
其实题目就是让我们求所有
发现维护
每次操作肯定要将长儿子及以下所有的点的答案都要加上
具体流程如下:
1 | void solve(int x){ |
当然我写 Maisolve 就是为了避免这种 solve 就是了
P10641 攻略 Exp
题目大意
TL:1s,ML:512MB
给定一个有
对于所有数据,保证
解答
考虑最基本的贪心算法。就是首先选值最大的那一条链,然后把那条链删了,然后再选删了之后值最大的那一条链,然后再把那条链删了……
这个东西本质上是和树链剖分相同的,所以我们这里做个“值域链剖分”,重儿子的值更大。然后我们选出前
*CF958B2 Maximum Control (Medium) 2200
题目大意
TL:3s,ML:250MB
给你一棵由
- 点集
的所有点 - 对于任意
, 到 路径上的点。
现在问当点集的大小为
解答
CF504E Misha and LCP on Tree 3000
题目大意
TL:8s,ML:500MB
给定一棵
有
解答
如果不是在树上的话,肯定会想到二分哈希。而在树上的话,就只能想到二分哈希了,因为其它方法都行不通。
假设我们要求树上
从上到下的哈希值是好求的。我们维护
从下到上的哈希值比较难搞。我们维护
这里我们要求路径
在 的上面,那么直接求 相对于 的第 个儿子,也就是求 的第 个祖先,然后求这条链的哈希值。 在 的下面,那么直接求 跳 级祖先的这条链的哈希值。 - 否则记
,若 的 级祖先已然超过了 ,那么再算上 相对于 的某个儿子,然后合并两条链的哈希。否则就直接求 的 级祖先的链的哈希值即可。
最后,因为是二分哈希嘛,所以就正常处理询问、二分比较就完了。
顺带一提,最开始我设的 long long
了,所以最后把
*P9399 人生如树 Mas
题目大意
TL:2s,ML:512MB
给定一棵
设当前树上的节点数量为
输入四个整数
。令 的简单路径上顺次组成的数组为 , 的简单路径上顺次组成的数组为 。求出 。保证 。 输入两个整数
。代表新建一个点权为 的节点,编号为 ,建立一条 的无向边,其中 。显然,此后 。
对于两个数组
解答
步骤和上一道题一样。只需要再记录一个序列
这道题比较好的一点就是这道题不卡单模哈希。私募 Codeforces。
P6961 Journey from… Mas
题目大意
TL:3s,ML:512MB
给定一个无向图(其中点
解答
我们可以首先求从
然后我们枚举每一条边,然后钦定这一条边作为第
为什么这样做是对的呢?我们分讨一下:
- 当此时
真的是第 大边边权,那么正好。 - 当此时
大于第 大边边权,那么后面就会在 部分使答案变大,即不优。 - 当此时
小于第 大边边权,那么就会在算 的时候使答案变大。
所以这样做是对的。视
P8511 [Ynoi] TEST_68 Mas
题目大意
TL:3s,ML:512MB
给定一棵
对每个点
求出所有
对于
解答
遇到这个两个元素异或的,可以考虑使用 0-1 Trie。首先我们可以求出全局选哪两个点的答案最大。可以边插边查,这个是
然后我们可以发现,当
对于一条链求答案,我们从上往下跳,跳到
P6072 Path Mas
题目大意
TL:1s~3.5s,ML:244.14MB
给定一棵
令
再令边集
现在,要你求出
通俗的讲,你要选择两条简单路径,满足没有重合的点,且边权异或和之和最大。
对于
解答
首先,一条路径
这样,题面就可以转化为:给定原树,你需要对于每一个点
- 在
子树内、异或和最大的两个点的异或和 - 不在
子树内、异或和最大的两个点的异或和
第二个就是上一道题求的。第一个的话可以使用 Trie + 树上启发式合并做。因为
不过,要注意必须要选两条路径,也就是
P4931 情侣?给我烧了! Ult / *P4921 弱化版 Mas
题目大意
TL:1s,ML:500MB
有
现在,每个人将会随机坐在某一个位置上,且恰好将这
如果一对情侣坐在了同一排的座位上,那么我们称这对情侣是和睦的。
你的任务是求出共有多少种不同的就坐方案满足恰好有
两种就坐方案不同当且仅当存在一个人在两种方案中坐在了不同的位置。不难发现,一共会有
由于结果可能较大,因此输出对
输入包含
对于
解答
我们可以将这个问题分成两个部分:先把
那么就先解决在
然后解决剩下
那么可以使用递推的方式:首先人
现在我们分类讨论:若
然后就可以预处理所有要用到的信息,每一次
线性基专题
虽然就是因为前几天有一道 T1 考线性基被爆了才去学的来着……
P4570 元素 Exp
题目大意
TL:1s,ML:125MB
给定
解答
考虑异或不为
我们可以发现,假如你现在线性基插不进去,那么你可以删掉线性基里面一个特定的元素使得这个东西可以插进去。并且要求魔力值最大的话,那么就按魔力值从小到大插,如果这个插不进去,那么就找到一个能替换的并且值魔力值最小的替换掉。这种方法其实和按魔力值从大到小插不替换是等价的。然后这道题就做完了。
P3857 彩灯 Exp
题目大意
TL:1s,ML:125MB
Peter 女朋友的生日快到了,他亲自设计了一组彩灯,想给女朋友一个惊喜。已知一组彩灯是由一排
注: 开始时所有彩灯都是不亮的状态。
输出答案
对于
解答
很明显的,我们可以将每一个开关控制的范围那个字符串看成一个
我们可以将每一个线性基里的数看作将第
P4301 新 Nim 游戏 Exp
题目大意
TL:1s,ML:125MB
传统的 Nim 游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同)。两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴。可以只拿一根,也可以拿走整堆火柴,但不能同时从超过一堆火柴中拿。拿走最后一根火柴的游戏者胜利。
本题的游戏稍微有些不同:在第一个回合中,双方可以直接拿走若干个整堆的火柴。可以一堆都不拿,但不可以全部拿走。从第二个回合(又轮到第一个游戏者)开始,规则和 Nim 游戏一样。
如果你先拿,怎样才能保证获胜?如果可以获胜的话,还要让第一回合拿的火柴总数尽量小。如果不能取胜输出
对于全部的测试点,保证
解答
众所周知的,传统的 Nim 游戏的必输条件是异或和为
那么就可以类比第一道题的思路,从大到小插,然后把不能插的数取出,这样的和最小。(但其实我也不会证明)
P4151 最小 XOR 和路径 Mas / *CF845G Shortest Path Problem? 2300 Double exp
题目大意
TL:1s,ML:500MB
考虑一个边权为非负整数的无向连通图,节点编号为
路径可以重复经过某些点或边,当一条边在路径中出现了多次时,其权值在计算 XOR 和时也要被计算相应多的次数,具体见样例。
对于
解答
我们可以先找出来一条从
所以就变成了:一条主路径权值,这个必须要算。我们定其为
P3733 八纵八横 Mas
题目大意
TL:1s,ML:125MB
有一个国家。这国家里面有
现在要建一些高铁。每一条高铁连接两个城市并且每一条高铁也有一个非负权值。我们定答案为从
给定
Add x y z
:在城市中建一条权值为 的高铁。如果这是第 个 Add
操作,那么就把这条高铁命名为号高铁。 Cancel k
:拆除号高铁。保证此时 号高铁存在。 Change k z
:将号高铁的权值修改为 。
现在需要求没有操作之前的答案和每一次操作后的答案。共
解答
类比上一道题的思路,从
初始时,不加边,那么就直接像上一道题一样求。新建高铁也是好做的,但是现在多了拆除高铁和修改权值两个操作。这两个操作无法使用普通的线性基维护,所以可以使用可删除线性基。但是我不会这个科技,所以换个思路,线性基不能删除但是可以撤销!所以可以使用时间轴的线段树分治来维护这个线性基即可。因为高速公路永不拆除并且连通,所以可以直接使用 dist 数组维护环的权值。
注意命名高铁的时候注意是第 Add
操作而不是第
P3265 装备购买 Mas
题目大意
TL:1s,ML:125MB
脸哥最近在玩一款神奇的游戏,这个游戏里有
严格的定义是,如果脸哥买了
(
举个例子,
求能够购买的最多装备数量,以及在购买最多数量的装备的情况下的最小花费。
对于
解答
这道题才是真正的线性基模板。之前的线性基都是异或线性基。
这道题的题意就是选出尽量多的向量使这些向量线性无关并且使价值最小。
类比之前构造异或线性基的方法,我们可以使用高斯消元法来构造线性基。
还是记录一个大小为
1 | bool insert(Vector w){ |
然后是在最多元素的情况下的最小花费,那么就可以使用贪心,按照权值从小到大插入,最后提取出所有在线性基内的元素的元素个数和权值和即可。
P5556 圣剑护符 Mas
题目大意
TL:1s,ML:500MB
给定一个树形结构,有
Update x y z
:把简单路径路径上的所有点的权值都异或上 。 Query x y
:判断对于编号分别为的点间的简单路径上的所有点的集合,是否存在两个不相等的子集(可以是空集),使得两个子集的属性值相同。一个集合的属性值为这个集合中所有元素的权值的异或和。
解答
第一道场切的线性基 =ω=
思路比较简单。因为发现查询操作可以化为把 YES
,否则就暴力插。这样的复杂度是能接受的。
现在就要解决树上路径异或问题。这个可以使用重剖解决。并且重剖单点查询
P3292 幸运数字 Mas
题目大意
TL:2s ~ 6s,ML:2
给定一棵
解答
线性基有一个比较重要的性质:就是线性基可以合并!那么就可以将其视为具有和 RMQ 问题类似性质的问题(类似树上 RMQ)。于是就可以使用倍增做。因为线性基合并
CF1120D Power Tree Mas
题目大意
TL:2s,ML:250MB
给定一棵
你可以选择花费
你需要输出最小代价和并构造所有最优选取方案的并集。
解答
首先,区间
0630T1 - P7294 Minimum Cost Path P Ult
题目大意
TL:1s,ML:250MB
Farmer John 的牧草地可以看作是一个
Bessie 从方格
- 如果
,Bessie 可以以 的代价移动到下一列( 增加一)。 - 如果
,Bessie 可以以 的代价移动到下一行( 增加一)。
给定
解答
我们可以使用扫描线,维护当
考虑最开始的最暴力的 DP 做法嘛。因为 DP 式子可以写为
所以我们维护一个栈,栈里面存按照区间的下标前后关系存区间
然后查询的话,就二分找到对应的区间,然后
- Title: 6 月做题记录
- Author: 11490DX
- Created at : 2025-06-04 18:34:38
- Updated at : 2025-07-01 16:20:21
- Link: https://11490dx.net/2025/06/04/R706-practice-log/
- License: This work is licensed under CC BY-NC-SA 4.0.