12 月记录
529.CF2034F2
强化为 倍。
首先可以观察到,每条路径的概率相等,故我们只需计算所有路径的宝石和。
定义每次满足翻倍条件时,我们是将每个现有的宝石复制 份。
设 表示在满足条件 时,生成的宝石数。
每次满足状态时,我们要么由从箱子中抽取的宝石生成新宝石,要么由先前生成的宝石生成新宝石。
对于前者,转移为:
对于后者,转移为:
意义为由状态 生成的宝石在当前生成新宝石。
时间复杂度 。
530.CF2042F
似乎直接维护在区间中取了 个区间的最大值就好了,直接做模拟费用流的话非常麻烦。
。
531.CF2042E
手刃 clist *2800。
先二分找到一个必选的根,每次只需按位考虑能否去掉一个点,相当于将这个点及其子树都去掉。
那么如果子树内有一种颜色出现两次,显然不行,否则,需要子树内的点的另外一个对应点在根所在的联通块内,随便优化一下就好了。
532.The 3rd Universal Cup. Stage 19: Shenyang https://qoj.ac/contest/1865
A
妙妙题。
可以转化为递减序列,首项必须贡献高度,其他位置可以选择是否贡献高度。
设 表示考虑了 段,从大到小考虑到长度为 的段,目前高度是 ,转移可以考虑新增一个长度为 的段,或者转而考虑长度为 的段,这样是一步一步走,似乎跳着走也可以,不过麻烦些。
设 表示考虑了 段,其中有 段对高度有贡献,目前高度为 ,转移可以考虑新增一个长度为 的段,或者已有的段全部增高 ,妙妙,发现每种状态都有唯一转移,类似杨表的转移。
考虑根号分治,在 中处理长度 的段,即转移修改成每次新增一个长度为 的段。
然后用 更新 的初值,再使用 处理长度 的段即可。
时间复杂度 。
B
写个搜发现 无解。
C
非常妙的题。
无解的情况只有第 轮开始时就有角色被陨石砸到,或者某一轮中所有格子均有陨石落下。
考虑只有一个角色的情况,考虑时光倒流,第 轮是一个单点,找到前一轮的位置,加上走过的区间并多出来的部分的前缀时间的陨石和。
考虑一个区间 ,如果上一轮有格子没有落下陨石可以直接走到这些格子,否则一定是走到两侧最近的不会落下陨石的格子。
妙妙!可以归纳证明,所有有效的区间左右端点单调,且每一轮只有 个。
考虑有多个角色的情况,若某些角色在之后要相遇,可以直接调整为在第一轮相遇,不会变劣,太妙了。
于是先做上面的转移,求出 个有效区间的 dp
值。
接下来选择这些区间的若干个,每个区间内的角色不用考虑,只需算上区间外的角色向左或者向右走到一个区间,并沿途挖空第一轮落下的陨石。
设 表示考虑到 ,当前格子没有区间外的角色经过 有区间外的角色向左经过 有区间外的角色向右经过时所需挖走的最少陨石总数。
std 的转移写得很妙,限制不用太紧,因为不满足限制的转移都是不优的,使用单调队列维护选择区间的转移的 即可,注意 需要钦定前面有选择区间, 就不需要,因为他贡献不了答案。
D
发现答案就是逆序对的奇偶性。
区间左右移动也可以看成若干次交换相邻,也很好处理。
E
考虑找到一个初始矩阵的顺序,每次计算前缀的影响,得到当前的矩阵,算上最短路径,得到一种方案的代价。
状压找最小代价即可。
H
遍历实际上是 dfs
,每次找最小编号未访问点。
考虑一棵树,以 为根,从 点可以往子树中连出的边,对于树边 , 还可以与 子树内编号 的点任意连边,方案数为 ,容易发现只有这些方案。
可以不经过特殊边的情况用上面算就好了。
接下来考虑添加 ,连接了两棵树。
- 连边无影响。
- 连边是以 为根。
- 与 的连边相当于是 路径上的点与 上的点的贡献。
可以分别处理,第二部分就换根,第三部分搜一下就行了。
I
很妙。
限制就是后缀 层的边数和不超过 条。
从必要性考虑,找到最深的点子树中有两个叶子深度相同,那么一定要修改一条,并且不会修改两条,因为将其中一条换成 到父亲的边更优。
枚举修改两条边之中的一条然后递归处理,由于最多修改 条边,递归次数是 ,每次找 的时间复杂度是 ,总时间复杂度是 。
J
模拟题。
L
现在就是找到 的 最小然后 最小的解。
注意到最优解一定可以平移使得 “恰好”是某次过题的时间。
于是我们反向考虑,固定 是某次过题的时间,二分求出最小的过题时间 使得 ,再在 和上一次过题时间之间二分得到最小的 ,因为同一段内的 是单调的,再尝试向左平移这组解,固定 为某次过题的时间是同理的。
M
连出有向图,问题变成从某个点出发是否能到达一个权值和非 的环,考虑缩点。
问题变为判断一个强联通分量是否有权值和非 的环。
若一个强联通分量所有环权值和为 ,可以一定满足取出一棵 dfs
,求出 ,满足所有非树边的限制,就这样检查即可。
533.P9142 [THUPC 2023 初赛] 欺诈游戏
534.P9133 [THUPC 2023 初赛] 大富翁
535.P9135 [THUPC 2023 初赛] 快速 LCM 变换
536.P9137 [THUPC 2023 初赛] 速战速决
537.P10801 [CEOI2024] 海战
538.P9482 [NOI2023] 字符串
539.CF1750F
540.P10786 [NOI2024] 百万富翁
541.P11110 [ROI 2023 Day 2] 陶陶装苹果
542.P8476 「GLR-R3」惊蛰
543.[ABC347G] Grid Coloring 2
544.QOJ8089 Flaaffy
超级妙!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
545.QOJ9863 Brackets
显然只需考虑合法的串、内部合法且剩下若干左括号、内部合法且剩下若干右括号这三种情况。
其中后面两种哈希匹配即可,问题变成如何求剩下的括号的哈希值。
以左括号为例,维护一个栈,如果当前是右括号,且栈顶左括号无法与他匹配,则清空栈,并标记后续所有左端点小于它的区间无效;否则进行匹配。
如果是左括号直接加入即可。
考虑一个区间左端点,首先得是左括号,如果左端点在某对匹配的括号内部(这个在进行括号匹配时,做个区间覆盖即可,并查集维护),则区间不合法。
否则,计算栈中所有位于这段区间内的左括号的哈希值(二分),存下后缀哈希值即可。
时间复杂度 。
546.P7830 [CCO2021] Through Another Maze Darkly
妙妙题。
直接模拟感觉非常复杂。
还是应该紧密结合特殊性质。
发现进行有限次后,我们会按照欧拉序进行访问。
于是在欧拉序上模拟,如果我们某次从 走到 的父亲上了,意味着下一次走到 的下一个节点必然是 在欧拉序的下一位,这样的路径下一个点是有规律可循的,可以与欧拉序结合。
我们钦定这个欧拉序是环状的。
我们先标记所有节点,如果当前在一个有标记的节点,发现重要性质:这个节点一定没有被访问过,其实就是定义、、、我们删除 的所有标记(因为在此时,我们就已经可以将 解决了,后面的遍历顺序和欧拉序已经相同),并跳到 的顺时针第二个儿子处(注意是在欧拉序上)。
于是我们对于 ,删除他的所有标记,跳到第二个儿子处,然后顺序走到下一个有标记的位置,使用并查集维护即可。
询问可以离线下来做到 。
547.P11364 [NOIP2024] 树上查询
笛卡尔树做法:
二分求出一个点为 LCA
的极长区间,转化为链上问题。
问题变为有 个关键区间,查询与一个区间交 的关键区间的权值最大值。
发现竟然可以扫描线!!!
分治做法:
一个区间的所有子区间可以变成 段线段树区间的所有子区间贡献加上 次跨越中点的贡献。
处理跨越区间的贡献,等价于每个点有权 ,区间 的权为 。
找到极长关键区间,发现 是单调的,所以关键区间互相包含。
考虑前者,容易处理。
考虑后者,发现一个询问区间只会有一次 的情况,对于这次二分特殊处理即可。
然后以 为例,需要找到与 交 的关键区间最大值。
找到长度 的最小关键区间,若能满足就是最优,否则根据关键区间互相包含,找到左端点 的最小关键区间,发现他一定满足交 ,由必要和充分可以证明这是最优解,就做完了。
upd:还要学习一下树上合并关键区间的做法,YER。
548.XX Open Cup. Stage 14. Grand Prix of Wroclaw
J
显然可以先修改再交换。
交换其实和花费 交换 等价,那么交换可以直接用起点终点的匹配表示,且每次交换必然是 交换。
于是,一个位置被修改了,就不会参与交换。
进一步,已经匹配的位置不会动了。
然后,显然交换操作不会相交。
再进一步,如果 匹配,那么对于 ,且 都被修改且不同,那么 也一定可以调整为匹配,且 区间内必然都是交换。
设 表示 匹配的最小代价,当前位置要么修改,要么与前面一个匹配。
修改容易处理,交换用栈找唯一合法位置即可。
还有模拟费用流做法。
带有反悔操作的堆,意义可以表示为获得一个物品需要走的反悔边的代价。
可以发现对于已经匹配的位置我们肯定不会去动它们,否则答案一定不够优。对于操作其实等价于花的代价交换和。
考虑两个交换操作和,显然区间和要么相离,要么其中一个被另一个包含。因为出现相交的话,我们总是可以调整一下,使答案不变劣。
进一步可以发现,如果用了交换操作,那么对于的我们都可以用交换操作。这是因为,一旦最优解里用了交换操作,则有,那么对于的,也是有的。
因此我们可以考虑用dp来求最小代价。令表示把前个位置匹配的最小代价,那么有两种操作法:
- 选择操作或者,那么
- 选择操作,我们需要找到一个最大的,使得区间里都可以通过交换操作来搞定。然后。
这个最大的我们可以用一个两个栈维护01
和10
匹配的情况,然后顺便也可以求出。
D
I
很晕。
不相交路径,可以想到网络流,流量为 。
但是直接跑会有负权边。
考虑先求出 到所有点最短路 ,修改边权 为 ,于是,新图上 到 最短路加上 就是原图上的最短路了。
发现新图具有性质: 到 最短路径上的边全是 。
于是我们模拟流,将这些边翻转,每条边的权依旧非负,并且将势能 改为 。
再跑 的最短路,加上 就是答案了。
这样就对了,因为我们只需证明在翻转了边之后的新图上,应用每个点的新势能,边权非负。
于是先求出 ,翻转最短路上的边,再求 ,加上 就是答案。
考虑按照 dij
一样松弛就是 ,我们希望找到一个顺序,使得提出 时它就是最优的。
那么我们只需要将被松弛的点放进堆中,每次取出最小的就能满足,前提是我们可以松弛所有情况。
首先考虑 号点,分成若干联通块,考虑 连接的非树边,直接松弛。
然后不同联通块的边,比如 ,发现可以用 更新 ,而同一联通块的边松弛不了。
然后发现, 在松弛后就没有任何用了,可以删掉, 号点也是。
在最短路树上的边:可以发现从其实可以到达树上任意的节点,并且花费的代价都是,因为树边的边权都是了。考虑把点删掉,那么所在的连通块会分成若干个小连通块。对于横跨不同小连通块之间的边,我们显然是可以用来更新的。所以一个粗暴的做法就是枚举每个新出现的小连通块,以及里面每条横跨边,做一遍更新。但是这样复杂度是的。可以发现,如果不遍历最大的连通块,只遍历其他较小的连通块,这样复杂度是有保证的,每条边最多只会被遍历次。
然后扩展一下,每次取出一个最小点,松弛这些边,分裂成若干联通块,分治下去即可。
而枚举不同块之间的边代价太大,类似启发式分裂,我们不遍历最大的联通块,只遍历最小的联通块,这样每个点只会枚举 次,每条边也是。
感觉很妙,但是。
549.P9542 [湖北省选模拟 2023] 棋圣 / alphago
考虑一个环,如果是奇环,那么任意状态都是可达的,答案就是 ,否则,奇偶性相同的任意节点都能聚在一起,答案为 。
发现有环的情况都能先将所有点聚在环上(如果环被占满了,那么任意操作都能搞出一个空位),如果有奇环,就是前者,否则就是后者,二分图染色判断即可。
接下来考虑树的情况。
发现,若存在度数 的点,即存在 ,且存在 ,操作 子树,能使得一对在 子树内的点距离减少,其他距离不变,并且一直能操作,于是奇偶性相同的点都能缩到一起了。
那么剩下一条链的情况,那么每次操作,要么将相邻两对点的距离 ,要么平移所有点,相对顺序不变。
考虑 dp
,设 表示链上第 个点聚集了区间 中的棋子,转移枚举下一段 在第 个位置,满足限制 ,于是 这三维是 级别的,总复杂度 。
550.P9136 [THUPC 2023 初赛] 种苹果
新时代打磨你,随机撒 个点建虚树,任意点到最近关键点为 ,维护虚树中相邻关键点之间的链,每条链重构复杂度 ,插入为 。
查询,暴力 跳散块,整块二分 。
修改,对于虚树下方节点需要暴力,散块也暴力,整块打标记,注意无需重构,因为我们维护的是排序数组,对其中一些点加定值后,归并即可,。
令 ,时间复杂度 。
加点考虑定期重构,每次重构复杂度 ,每 次重构即可。
细节列表:
- 随机撒点,将每个关键点跳到根并沿途打标记,如果碰到标记点就停止操作,将该点加入虚树。
- 求
LCA
,较为容易。 - 很难维护深度,考虑仅维护关键点的深度,每次加点,将子树所有关键点深度 ,加点操作不会影响虚树形态,我们储存整棵虚树,
dfs
即可。
551.算数
大概是九进制,每个进制的系数 ,若 ,可以进位然后用 的负号表示。
552.第二题(b)
考虑二分答案,限制就是每个前缀的最大后缀和 ,设 表示前缀 用了 次的最大后缀和最小是多少,每次只转移 的。
发现 关于 是凸的,于是平衡树维护差分数组即可,slope trick
。
553.P7594 「EZEC-8」Clean Up
从充分性考虑,若一位位置被两次操作覆盖,根据等腰直角三角形的特殊性质,将这两次操作合并,更优。
从必要性考虑,对每个 来说,覆盖 这些点的三角形与覆盖 的三角形是同一个,合并一下连续段,发现直接就是答案了!!
554.[ARC112E] Cigar Box
显然每种数只需关心最后一次操作。
那么有三种数,最后一次操作到前缀,最后一次操作到后缀,无操作,分类完就不用算顺序,显然每一类中的数是固定的。
枚举操作前缀的数个数 ,操作后缀的数个数 ,则答案为:
意义为将操作分成互不区分的 类,从中选出 类,每一类中最后一次操作的方向固定,那么只有 次操作的方向不定。
555.P9604 [IOI2023] 超车
满足单调的条件下,段数为 的函数与段数为 的函数复合后的段数不超过 ,可以 合并。
设 表示 时间经过调度点 后到达 的时间,于是我们要求 的复合。
由于每段只会被至多一个车拖累,所以 是不超过 段的分段函数。
可以考虑分治合并,得出 段的答案分段函数,时间复杂度 。
556.P9967 [THUPC 2024 初赛] 采矿
容易想到设计状态, 表示当前机器人在 ,左子树人个数,右子树人个数,执行完前面操作的最大和。
注意这样状态数是 的。
对于 操作,容易维护。
对于操作 ,从下往上,设计辅助转移 表示机器人从 的左/右子树跳上来,对应子树的 。
对于操作 ,从上往下,设 表示机器人从上面跳下来, 子树的机器人总和。
转移都是枚举分配给另一个子树的人数。
时间复杂度 。
557.FWT 进阶 遗传与进化
https://www.luogu.com.cn/article/y0unggsj
http://192.168.102.138/JudgeOnline/upload/attachment/file/20220627/20220627051951_62042.pdf
构造正逆变换矩阵,事实上 FWT
的正逆变换矩阵不一定必须互逆。
558.[ABC262Ex] Max Limited Sequence
显然每个限制只需关心值域上界在他范围内的点是否取到上界即可。
拎出一个值域上界的点和限制。
然后 dp
,设 表示考虑 ,上一个填了上界的位置为 的方案数。
那么:
考虑限制 ,相当于在 时将所有 赋值为 即可。
于是维护单点修,区间乘,区间求和即可。
559.P10432 [JOISC 2024 Day1] 滑雪 2
很妙的题。
,喜剧性的是漏了一个性质没观察到。
考虑如何判断合法,显然是 ,若某个时刻不满足,就需要让前面的 增加直到恰好达到限制,我们需要操作在前面的 最小的值,发现前缀 最小的值必然留在前缀中(做的时候只会猜测fdjkgjdfklgjkljlkfgdjlkgfdklj)。
观察,若某时刻若干个数在位置 ,则它们必然不会全部往上加,留下一个空位, 前面连出来的树中一定会有叶子,所以我们在这若干个数中选择一个,连向那个叶子,并占用这个空位,更优。
于是最终的值域,是 的,所有能取用的值就是将数在值域上铺开之后的取值,且可以发现,答案 。
在这若干个数,我们贪心选择 最小的那个,更优,于是,值域从前到大,每个位置至少会有一个数,且前缀 最小的值必然留在前缀中。
就是类似一个筛选的过程,每次决定留下若干数在这个位置,留下的一定是按照 排序后前缀的数。
于是考虑 dp
,设 表示考虑了 的条件,有 个数加到了 ,。
直接转移是 的,不难推一推,用辅助转移数组优化,做到 。
注意 dp
还是分成是否确定根的两部分。
560.斐波那契(fib)
妙妙,积性函数等于每个质数的对应占位函数的狄利克雷卷积。
然后 ,其中练乘是狄利克雷卷积。
然后从小到大枚举,刚好可以避免枚举一个数,然后不断除的大常数写法。
561.再学 P5470 [NOI2019] 序列
给定两个长度为 的正整数序列 与 。
分别对两个序列各指定恰好 个下标,要求至少有 个下标在两个序列中都被指定,使得这 个下标在序列中对应的元素的总和最大。
至多 个下标不同。
那么可以建出费用流模型:
- ;
- ;
- ,表示选择一对相同的下标。
- ,表示任意配对的组合。
- ;
- 。
考虑模拟 EK
,那么与 相连的边不会退流。
那么每次必然选择一对 ,有如下情况的增广路:
- 。
- ,消耗一个自由流量。
- ,增加一个自由流量,并选择 ,其中 之前已选。
- 诶,不妨思考为什么不会有更多退自由边的情况呢,拿图出来解释。
- 结论:
- 在非增量费用流中,源汇边不会退流。
- 增广路不会多次经过同一个点。
- 如果退更多自由边了,就会重复经过 ,不优,故选择自由边数与退还自由边数的差绝对值(为什么呢,正着取和反着取会抵消,最终的结果就是不经过了)在增广路中不会超过 。
- 。
- 。
但是由上面的话可能会发现问题了,如果我选择两条自由边,同时取消两条自由边呢?
其实就是证明正着取和反着取都不会超过一条。
手动画一下,发现要么不优,要么存在一张子图在之前不优。
因为反平反和正(平反)正的子图是不优的!!!!!
其中反指退还自由边,平指选相同下标,平反是取消相同下标,正指选自由边。
由上可以知道,我们在贪心的时候,有若干种最大费用流,我们是尽量让自由边更小的。
于是我们用五个堆维护上面的转移。
用 维护两侧未选的数的 , 维护未选的 的 , 维护本侧没选,令一侧选的数的 。
记 的堆顶为 ,则:
- 。
- ,需要有自由流量。
- ,增加自由流量。
- 。
- 。
注意如果我们钦定是自由边,但是取出的平边的话,因为不优所以不用管他。
就做完了。
这下真会了。
562.P10221 [省选联考 2024] 重塑时光
诶。
竟然有 分的 bell
数搜索!!!
题面太复杂,以后还是要写一写简要题意!!
563.P10360 [PA2024] Desant 3
妙妙题。
mx 里看过。
集中注意在这个对 取模,若 与 不同,操作完之后都是 ,两种情况被抵消了,所以只需考虑 的情况。
初始所有位置未知,逐步执行操作,假设我们操作的是两个已知的位置,那么执行操作即可。
如果是两个未知的位置,那么可以只用算这两个位置相等的情况。
剩下假设 ,而 未知,如果 ,则结束后 ,否则结束后 ,那么发现直接作用就是交换 ,然后发现我们将 改为未知, 改为 的结果是一样的。
其他情况也是类似的。
那么我们对两个未知的位置,搜索确定它们是 即可,注意我们逐步执行操作的指针是对于每种搜索情况来说的,需要执行到碰到两个未知的操作才停止,然后去搜索是 ,于是时间复杂度为 。
这么说来有用的状态只有 ,这个 trick
感觉可以用来出题。
564.QOJ5020 举办乘凉州喵,举办乘凉州谢谢喵
草!
原来树状数组就算修改 ,但是查询 ,那么修改也要修改到 !!!
明天再写。
问题可以容斥为 , 子树与这条链距离 的点数 的 邻域 倍 子树中距离 小于等于 的点数。
后面两者容易维护。
考虑前面,设 表示 子树内与 距离 的点数, 表示 的轻子树内与 距离 的点数。
那么链上的贡献应该是链上所有点的 之和,减去 ,加上 ,其中 为链上的轻边, 为 的父亲。
于是就做到了 。
565.P7596 「EZEC-8」游戏蛇
和那道 cf 很像。
如果某个人决定转入链里了,那么我们可以判断他是否可以取得胜利。
- 当另外一个人走到这个链点时,前者进去了,那么后者跟着进去就输了。
- 另外一个人往中间的某个链去走,需要判断距离大小。
写出后面的限制,发现是单调的,可以对每个链点二分求得最大合法区间。
写出前面的限制,发现只是对链点所在位置的限制。
然后我们要分别对两个人求出最近能胜利的链点,这也能二分求得,判断那个人先到即可。
566.新居规划
关于退流会不会产生负环,我还不知道。
很妙的实现。
明天再写。
首先考虑环被占满的情况。
然后将环看作一条链,钦定最后一个位置是空的。
若有多个 的连续段,我们中间部分全部插入到其中一个里面,转化为:若干孤立点,若干 段,至多一个 段。
对于一个 段,我们将 较大的塞到 段的中间,不劣,所以进一步转化为:若干孤立点,至多一个 段。
先特判全是孤立点的情况。
那么我们会选出: 个孤立点, 个 的,以及 个内部点,满足 。
考虑模拟费用流,对于多元的流量限制可以考虑从小到大增量枚举 ,然后考虑退 的流即可。
不知为什么不会出现负环。。
http://192.168.102.138/JudgeOnline/problem.php?cid=1986&pid=1 这个题我也用这个做了,但是三元(这题也是三元)是对的,也不用消圈,然后四元不消圈全错,消圈部分错了。
567.但是题目有八个字
妙妙调整。
若某个操作顺序使得 ,那么将 插入到前缀和刚好超过他的位置之前,不劣。
不断调整,必然能结束。
于是对于一种顺序,只需考虑 的贡献。
所以最优顺序就是从小到大取。
于是我们就从小到大只需计算 的贡献。
再想想。
568.USACO2024DEC
569.数环(cir)
连续段 dp
。
朴素实现是 的。
这个环满足一个左部点一个右部点,可以钦定加入右部点增加一个联通块,加入左部点时决策左右连接的右部点,然后将这两个联通块连接,最后一定能数到环。
570.数树(tree)
正常树上 dp
,需要做一个和接近于 的包含 的序列的背包。
根据随机排列 序列的前缀和最大值为 。
我们可以随机排列儿子,并将背包大小设置为 就能算到解了。
571.P11398
可以考虑分块,维护 表示前 块 的出现次数。
修改是 的,查询需要 还原一个块的答案,是 的。
可以考虑倍增分块,最后一块大小为 ,从后往前每一块大小是上一块的两倍。
这样多出来的需要还原的块的复杂度是和 同阶的,且只有 块,复杂度为 。
572.QOJ8945 区间计数
我们希望数重复的区间,最多两个。
如果不交,条件就是 。
否则,就是存在 ,使得 的对应区间不交,且对应区间右端点为 。
考虑容斥,数条件一的数量 条件二的数量 满足条件一二的数量。
条件一是好做的,通过对 的一些限定,是可以做不交的。
条件二同样考虑对左端点扫描线,则 单调不减,对于同一个 ,其 相同的时间 ,我们希望对 ,只数一次。
所以维护一个“一血”标记,从 被修改时,区间打上标记,当询问时,数区间有标记的最小值并将这些最小值的标记去除。
“删除区间最小值标记”是能做的,具体就是合并容易,下传只需考虑左右子区间的最小值是否是全局最小值即可。
对于条件一二,因为 单调不减,发现我们就是数 的对应区间为 。
就是额外限定 ,二分单调栈找到那段区间,再查询最小值个数即可。
573.P8360 [SNOI2022] 军队
并查集结合序列分块。
记 表示颜色 在块内第一个出现位置,用并查集维护 的关系,可以找到一个位置的颜色, 表示颜色 的标记, 表示大小。
对于整块,将颜色 改为 :
- 若 ,跳过。
- 若 ,交换 的信息,并将 的颜色设为 即可。
- 否则,重构整块,均摊正确。
对于散块,只需重构 这两种颜色。
574.P10140 [USACO24JAN] Island Vacation P
绝妙题。
考虑修改题意,变成在广义圆方树上的游走。
记方点 为儿子个数对 取 的值,若为 就是树边,否则是环。
定义圆方树上一个方点到 其第一个儿子再到其最后一个儿子回来为一个环
那么,设当前在圆方树上的点 :
如果不存在尚未走过的节点,结束。
-
若 是圆点:有 的概率停下。
设 ,则有 的概率走到他父亲环上的下一个点(取决于行走方向)。
对于 的每个没有被访问过的儿子 ,有 的概率走向 。
-
如果 的方点:如果以前没有访问过,那么等概率走向 的第一个或最后一个儿子,否则已经走完他的环了,回到父亲。
那么这样我们就将是否访问转到点上了。
那么可能的行走路径就是走到若干儿子里绕一圈,再回来,是若干嵌套的结构。
设 表示到达圆点 后走到其左右兄弟的概率, 表示方点 从他的儿子下绕一圈回到 的概率。
记 ,那么 ,注意这里指的是阶乘的前缀积。
这个式子的意思是选择 个儿子走回来了的概率,算上顺序,还有不结束的概率,然后每个要往下走的儿子有两种方向可以选择,其中 可以背包算。
然后 即为他的所有儿子的 的乘积。
再设 表示:
- 若 是圆点,那么 表示走到 然后从 走到 的第一个儿子然后走到 的概率(注意并未考虑往下走然后回来结束的概率), 同理。
- 若 是方点,那么 表示走到 的概率,。
初值 。
对于方点 对儿子 的转移,有 就是 乘上 的前缀 的积, 同理。
考虑从圆点 走到儿子 的转移,设 。
那么 。
那么停在 的概率就是 减去走向兄弟的概率,再减去走向某个儿子且不回来的概率。
不是兄弟,谁能做出来并调出来啊!!!
575.Kummer 定理
对于质数 ,其在组合数 中的幂次等于 进制下 需要借位的次数。
中 的幂次等于 在 进制下进位的次数,因为 的借位次数等于 的进位次数。
576.P8861 线段
绝妙题。
没有二操作就是区间加,区间求和了。
考虑 的部分。
始终满足如上条件,故左右端点是独立的,变成将 的变为 ,可以并查集维护,是均摊正确的。
这启发我们用类似猫树的结构维护,将每个区间插入到猫树上。
若一个节点区间被 完全包含,那么没有变化。
故只需考虑 个节点。
若 跨过中点,使用上述做法即可。
否则,假设 ,对于一个区间 ,若 ,则他会被弄到右子树中,做插入即可,每个线段只会被插入到 的区间,这也是对的。
就做完了,两个 。
577.P7737 [NOI2021] 庆典
考虑缩点后 dag
是联通的。
而题目中的性质告诉我们,每个点保留到他的那个点中拓扑序最大的到他的边,连通性不变。
故处理完之后就是一颗叶向树。
考虑建出 个点的虚树,树边用链上 和表示,非树边权为 ,可以边开成点。
问题变成在给你一个有向图,问从 到 可能会经过多少个点,点边数较少。
正着搜一遍,反着搜一遍求交即可。
578.CF2048G
579.范德蒙德卷积做一半
首先有:
类似地:
右边来看,就是求 的非负解数,而我们枚举前 项的和求很好证明了。
换一种角度,就是 与 的方案数乘积,这可以变成 的方案数,注意后者路径是 。
而如果我们要求:
这可以简单的看作从 ,与 的相交最高点 。
发现这与与 的相交最左点 等价。
于是我们枚举相交最左点,有:
意义是 乘上 的方案数,很妙!!
580.P8367 [LNOI2022] 盒
要计算:
相当于我们要对 计算:
那么就是 ,与 交点最大值不超过 。
可以变成 与 交点超过 ,所以上式等于:
由于 递增,我们可以模拟 的增加,变化时使用对应的式子。
581.P9361 [ICPC2022 Xi'an R] Contests
调整法。
若某一次跳跃的终点不是 ,假设是用第 场比赛去跳跃的,那么我可以调整到能跳到的第 场比赛最小的点,于是每个点只有 个有效后继。
考虑倍增,可以合并,就做完了。
582.P9368 [ICPC2022 Xi'an R] Streets
处理出 表示 的最小的 , 同理。
那么我们就是要最大化 ,满足 。
枚举 ,二分判断 是否存在合法的 ,就是找最小值,求出 的凸包后可以二分。
考虑维护后缀凸包,从后往前建凸包,往栈里加点和删点就等价于是在树上新增一个儿子或者跳回父亲,最后得到一棵 个节点的树,每一个后缀凸包就对应一条到根的链,二分改成倍增即可。
考虑从小到大枚举 ,判断一个 是否合法,因为 增大 是减小的,所以双指针即可。
时间复杂度 。
583.P10181 龙逐千灯幻
超级妙妙 wqs
二分题。
首先有暴力 dp
,令 表示 分成 段,转移:。
可以线段树优化做到单次 。
因为 是凸的,而用凸函数划分序列的价值关于段数是凸的,即 关于 是凸的,使用 wqs
二分,转移变成了 。
观察 的部分,则 ,那么当 时,,一定是分成一段,所以预处理斜率为 的 dp
值即可。
这启发我们,凸函数,当斜率较大时,切点较小。
设 ,因为 是凸函数,所以 。
因为 ,所以 ,所以 。
那么考虑根号分治:
- 对于 ,预处理。
- 对于 ,只需考虑斜率 ,预处理。
时间复杂度为 。
想想优化空间,前面部分很好优化。
考虑后面部分,我们从小到大处理 ,若 那么询问 就能删掉了,因为这样 是单调下降的,所以对于相同的 ,按照 从大到小处理即可。
考虑优化,我们对 dp
数组做的操作是:
- 末尾加数。
- 后缀加 。
- 求最大值。
考虑维护后缀 单调栈,那么 操作在末尾弹栈即可, 操作就是找栈顶。
考虑 操作,需要找到后缀在单调栈上对应位置,并将他前面的若干东西弹出,那么考虑用链表维护单调栈,并查集找每个点右边第一个在栈内的元素。
至于加法,维护后缀差分标记即可。
时间复杂度 ,空间 。
584.P11065 【MX-X4-T5】「Jason-1」占领高地
妙妙!!
考虑从小往大加点,对于满足有向联通关系的两个点,将它们合并,使用启发式合并维护询问即可,具体就是将询问放在起点的终点,这样启发式合并的时候只需枚举小的一个联通块的询问。
问题是怎么找要合并的点。
发现 ,那么也能到 ,于是每个点能到的区域是一个矩形。
我们考虑钦定走的过程中曼哈顿距离不断加一,将军事化程度看成一个变化的值,如果往高度低的走就不变,平着走就 ,往上走就 ,这样 的条件就变成了存在一条起点到终点的初始值为 ,末尾值 的路径,因为绕远路是不优的。
考虑设 表示之前激活的 走到 的最大军事化程度。
加入一个新的点 ,不断 bfs
相邻的点 ,若能更新 ,就加入 ,这样钱数变多了,能走到的点也多了,需要更新。
因为 ,于是 ,每个点只会被更新常数次!!
还有另外一种做法。
因为每个点能到的点是一个联通块,我们可以将在范围内任意移动物资变成一步一步移动,考虑两个四联通相邻的格子,计算从其中一个格子移动到另一个格子的最大 值,问题就可以变成网格图的瓶颈路。
建出 kruskal
重构树即可。
令 表示覆盖 ,且 值为 的所有补给站中 的最大值。
根据上面的结论,一个点到另外一个点,一定可以先走横的再走竖的,那就可以转移了。
585.P8456 「SWTR-8」地地铁铁
结论牛牛题。
考虑容斥成数只有 路径、只有 路径,同时有 路径和 路径(不存在交叉路径)三种情况。
先看前两种。
性质 :点双经典性质:任意两点间存在点不相交的两条路径,即一个经过两点的简单环。
性质 :点双中,对于点 和边 存在经过 的简单环。
证明:设 ,将边拆成 ,不影响连通性,根据性质 存在经过 的简单环,故 都在简单环上。
性质 :点双中,任意两点 和一边 ,存在 的简单路径。
证明:由性质 ,存在经过 的简单环 ,考虑 的情况,考虑任意一条 的路径 ,考虑 与 的第一个交点 ,显然 ,否则 为割点,那么经过 跑环的另一侧就能构造了。
那么对于只有 路径的部分,若一个点双内存在 边,那么经过改点双的点对不合法,那么删去有 边的点双内部的边和点,保留边界上的,剩余联通块大小选 的和就是答案。
再看后一种,定义满足条件的点对为合法点对。
性质 :若合法点对间存在割点,那么交换一下,不合法,故合法点对属于同一个点双。
令 所有 路径覆盖点集 ,所有 路径覆盖点集 。
性质 :由 得, 无交。
性质 : 之间无边。
性质 :点双中,任意三点 ,存在经过 且以 为端点的简单路径,由性质 可以推出。
性质 :。
证明:对任意 应用性质 。
性质 :设 且 ,存在 分别到 或 的两条仅经过 的不交路径。
证明:若 或 ,显然。
考虑仅经过 的路径 ,若 ,显然。
否则考虑 的任意路径 ,考虑 与 的第一个交点 ,显然存在 ,否则 是割点。
若 在 上,则 和 无交点。
若 在 上,则 和 无交点。
所有,对于任意 ,存在 分别到 或 的两条仅经过 的不相交路径,将这两条路径通过 之间的全 路径连起来,得到 不合法。
同理在 内的点对也不合法,显然一个在 ,一个在 的点对不合法,所以一个点双内部最多一个合法点对。
考虑充要条件:点双内恰好存在两个点满足同时有 出边。
必要性: 合法,由性质 知只有 同时有 出边。
充分性:根据性质 ,考虑任意 ,路径必然同色,否则找到切换颜色的点,存在 出边,矛盾,因为 同时有 出边,所以存在全 路径和全 路径。
586.P10208 [JOI 2024 Final] 礼物交换
妙妙题。
对于 ,向满足 的 连边,然后做二分图匹配。
考虑 hall
定理。
考虑极端情况,对于 最大的 ,需要于其他线段有交。
考虑扩展这一结论,首先发现所有线段与其他线段有交的必要的,否则拿出在这条线段左侧包含自己的集合 ,显然 只能为 ,不合法。
再考虑证明充分性,对于任意 ,取出 最小的 ,则 与集合内的其他元素右边,邻域已经达到 ,再拿出与他相交的线段 ,讨论:
- 若 ,则 不在 集合,而 ,给邻域贡献 ,合法。
- 若 ,则有 ,有 ,继续讨论:
- 若 ,则 ,给邻域贡献 ,合法。
- 若 ,则 给邻域贡献 ,合法。
于是充要条件就找到了,预处理出 表示 编号左边与他相交的最大编号, 同理。
考虑询问,不合法就是存在 ,满足 ,就是矩形覆盖单点查了,扫描线即可。
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/18619417
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!