DEC1 Breakdown
将过程逆序,即加边并维护以下信息——
- fk,i,j表示从i到j恰走k步的最短路(其中k∈[0,2])
- fsk,i表示从1到i恰走k步的最短路(其中k∈[0,4])
- ftk,i表示从i到n恰走k步的最短路(其中k∈[0,4])
任取p,q∈[0,4]且p+q=K,答案即mini∈[1,n]fsp,i+ftq,i
当加入边(x,y)时,影响的fk,i,j必然有i=x∨j=y
任取p,q∈[0,2]且p+q=k,则fsk,i=minj∈[1,n]fp,1,j+fq,j,i
结合前者,仅需更新1=x∨j=y∨j=x∨i=y的情况,共计O(n3)种
ftk,i是类似的,时间复杂度为O(Kn3)
DEC2 Making Friends
记初始边集为E,维护Si为i向i<j的边,初始Si={j∣i<j∧(i,j)∈E}
对于第i天,即修改∀j∈Si,Sj=Sj∪(Si∩(j,n])
事实上,仅需取x=minj∈Sij执行上述修改,其余修改会在i=x时实现
启发式合并即可,时间复杂度为O(nlog2n)
DEC3 Palindromes
设区间[l,r]有k个G和s个H,第i个G前有ai个H
设操作后第i个G前有bi个H,则答案即minb1≤b2≤...≤bkbi+bk−i+1=s∑ki=1|ai−bi|
单调性可以在最小化中保证,同时|ai−bi|+|ak−i+1−bk−i+1|≥|ai+ak−i+1−s|且总可以取到
特别的,当2∤k时且i=k+12时,两项相同,需要一定特判
综上,则答案即⎧⎪
⎪
⎪⎨⎪
⎪
⎪⎩∑k2i=1|ai+ak−i+1−s|2∣k−12∤k∧2∤s∑k−12i=1|ai+ak−i+1−s|+|ak+12−s2|2∤k∧2∣s
枚举这k个G的中心并向两边拓展,记ci为前i个位置中H的个数,则问题即:
- 若(x,y)为关于中心对称的两个G位置,则在可重集S中加入cx+cy
- 枚举所包含G恰为当前情况的区间[l,r],求∑x∈S|cl−1+cr−x|
注意到cl−1+cr的变化量为O(1),维护一个指针,每次询问时移动即可
同时,每个区间恰被询问一次,时间复杂度为O(n2)
JAN1 Tractor Paths
显然与i相邻的j构成区间[Li,Ri],且Li,Ri均单调不降
对于询问,不妨假设a<b,那么最短路d即每次贪心从a移动到Ra直至Ra≥b的次数
记Ai和Bi分别从a或b出发贪心时第i次移动到的位置,则答案也即∑di=0|S∩[Bd−i,Ai]|
显然区间非空,差分拆开后倍增时求和即可,时间复杂度为O(nlogn+qlogn)
JAN2 Mana Collection
记d(x,y)为x到y的最短路,显然仅关心于每个点最后一次被访问的时间
设时间顺序为a1,a2,...,ak(=e),即求
max∑k−1i=1d(ai,ai+1)≤sk∑i=1mai(s−k−1∑j=id(aj,aj+1))=sk∑i=1mai−k−1∑i=1d(ai,ai+1)i∑j=1maj
关于∑k−1i=1d(ai,ai+1)≤s的限制,若不满足,则去掉a1后上式必然减小
去掉此限制后,记fS,e为{ak}构成集合S且ak=e时∑k−1i=1d(ai,ai+1)∑ij=1maj的最小值,转移易得
在此基础上,答案即maxe∈Ss∑i∈Smi−fS,e,看作关于s的一次函数,对每个e求出其凸包即可
时间复杂度为O(n22n+q)
JAN3 Subtree Activation
记f(x,y)={|szx−szy|x和y成祖先后代关系szx+szyotherwise
问题即选择排列{an},并最小化sza1+szan+∑n−1i=1f(ai,ai+1)
考虑确定k每个儿子子树内的排列后将k插入,有以下两种情况:
- 插入到某个儿子的子树内,设相邻两点为x,y,则变化量为2szk−szx−szy−f(x,y)
- 若x和y成祖先后代关系,该式也即2(szk−max(szx,szy)),取x或y为k的该儿子即可
- 否则,该式也即2(szk−szx−szy),显然劣于前者
- 插入到两个儿子的子树间,即sza1和szan的系数发生变化
由于对称性,定义fk,x表示以k为根的子树中有x∈[0,2]个系数发生变化
转移可以自行分类讨论(注意一个子树自身不能匹配),时间复杂度为O(n)
FEB1 Hungry Cow
维护一棵权值线段树,对于每个区间,存储以下信息:
仅考虑区间内的食物和时间下,有食物的天数、天下标和 和 剩余的食物数
在此基础上,考虑查询一个区间内初始有x食物的答案——
- 若$x\le 左区间长度-$左区间有食物的天数,则仅影响左区间
- 否则,即将左区间填满,并以x−...+左区间剩余的食物数询问右区间
合并时,即对右区间以左区间剩余的食物数查询,单次复杂度为O(logV)
时间复杂度为O(nlog2V)(其中V为值域)
FEB2 Problem Setting
定义gn表示n道题目任意顺序选非空子集的方案数,则gn=n(gn−1+1)
记cntS为Hard集合为S的题目数,定义fS表示强制以S为结尾的方案数,则fS=gcntS∑T⊂SfT
对此cdq分治,每次转移时用FWT求高维前缀和,时间复杂度为O(nm+m2m)
FEB3 Watching Cowflix
若两个被选择的点间距离≤k,则可以贪心选择路径上所有点
在此基础上,每个连通块距离≤⌊k2⌋的点(及自身)不交,即连通块数≤n⌊k2⌋+1≤2nk
对此建立虚树并树形dp即可,时间复杂度为O(nlogn)
OPEN1 Pareidolia
关于B(s),显然可以贪心匹配,状态为bessie的个数及匹配到的位置
考虑线段树,对于区间[l,r],维护以下信息:
- 当之前已匹配bessie前i个字符时,bessie的个数 和 最终剩余的字符数
- 当之前已匹配bessie前i个字符时,每个前缀bessie的个数和
- 每个后缀bessie的个数和 和 最终剩余前i个字符的后缀数
- 区间内的答案A(s[l,r])
合并易得,时间复杂度为O(n+mlogn)
OPEN2 Good Bitstrings
问题即求满足以下条件的(x,y)个数:
- x∈[1,a],y∈[1,b]
- ∀i∈[0,x],j∈[0,y],(i,j)≠(x,y),满足[ij≤xy]=[ij≤ab]
考虑xy在Stern-Brocot树中XY的子树内,并分类讨论:
- 若X>a∨Y>b,显然无解
- 若XY≤ab,则xy在XY的左子树内时取ij=XY即矛盾,因此仅需考虑XY及其右子树内
- 若XY>ab,同理仅需考虑XY及其左子树内
最终,xy的取值即为一条链,并分类讨论:
-
对于其中XY>ab,则xy=tXtY时取ij=XY即矛盾,仅能取t=1
-
对于其中XY≤ab,设其构成序列{XkYk},则Xi,Yi单调不降且XiYi单调递增
换言之,取xy=tXitYi时仅需保证x<Xi+1∨y<Yi+1,答案也即∑k−1i=1max{⌊Xi+1−1Xi⌋,⌊Yi+1−1Yi⌋}+aXk
记值域为V,暴力递归最坏时间复杂度为O(V),但"拐点"至多O(logV)个,每次二分确定该段长度即可
前者直接加上长度即可,后者注意到⌊x0+(t+1)x1−1x0+tx1⌋在t≥1时为1,仅需特殊处理t=0时
时间复杂度为O(log2V)
OPEN3 Triples of Cows
构造一张新图,形式如下:
- 共2n−1个点,对应原图中的点和边,并称前者为黑点、后者为白点
- 黑点向以其为端点的白点连边,并以n为根建树
第i天时,将i删除并将相邻的白点合并,则(x,y)存在$\iff 存在白点j与x,y$相邻
(正确性归纳易得)
记si为(白点)i的儿子个数,并分类讨论:
- a,c与b相邻的公共白点相同,答案即∑i为白点(si+1)si(si−1)
- ……不同且均为b的后代,答案即∑i为黑点(∑sonsson)2−∑sons2son
- ……不同且分别为b的祖先/兄弟和后代,答案即∑i为白点2⋅si∑j∑sonsson
用并查集维护i的父亲,并维护相关信息即可,时间复杂度为O(nα(n))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2022-04-08 [loj3693]蚂蚁与方糖
2021-04-08 [cf674E]Bear and Destroying Subtrees
2021-04-08 [luogu5361]热闹的聚会与尴尬的聚会