USACO2023

DEC1 Breakdown

将过程逆序,即加边并维护以下信息——

  • fk,i,j表示从ij恰走k步的最短路(其中k[0,2]
  • fsk,i表示从1i恰走k步的最短路(其中k[0,4]
  • ftk,i表示从in恰走k步的最短路(其中k[0,4]

任取p,q[0,4]p+q=K,答案即mini[1,n]fsp,i+ftq,i

当加入边(x,y)时,影响的fk,i,j必然有i=xj=y

任取p,q[0,2]p+q=k,则fsk,i=minj[1,n]fp,1,j+fq,j,i

结合前者,仅需更新1=xj=yj=xi=y的情况,共计O(n3)

ftk,i是类似的,时间复杂度为O(Kn3)


DEC2 Making Friends

记初始边集为E,维护Siii<j的边,初始Si={ji<j(i,j)E}

对于第i天,即修改jSi,Sj=Sj(Si(j,n])

事实上,仅需取x=minjSij执行上述修改,其余修改会在i=x时实现

启发式合并即可,时间复杂度为O(nlog2n)


DEC3 Palindromes

设区间[l,r]k个G和s个H,第i个G前有ai个H

设操作后第i个G前有bi个H,则答案即minb1b2...bkbi+bki+1=si=1k|aibi|

单调性可以在最小化中保证,同时|aibi|+|aki+1bki+1||ai+aki+1s|且总可以取到

特别的,当2k时且i=k+12时,两项相同,需要一定特判

综上,则答案即{i=1k2|ai+aki+1s|2k12k2si=1k12|ai+aki+1s|+|ak+12s2|2k2s

枚举这k个G的中心并向两边拓展,记ci为前i个位置中H的个数,则问题即:

  • (x,y)为关于中心对称的两个G位置,则在可重集S中加入cx+cy
  • 枚举所包含G恰为当前情况的区间[l,r],求xS|cl1+crx|

注意到cl1+cr的变化量为O(1),维护一个指针,每次询问时移动即可

同时,每个区间恰被询问一次,时间复杂度为O(n2)


JAN1 Tractor Paths

显然与i相邻的j构成区间[Li,Ri],且Li,Ri均单调不降

对于询问,不妨假设a<b,那么最短路d即每次贪心从a移动到Ra直至Rab的次数

AiBi分别从ab出发贪心时第i次移动到的位置,则答案也即i=0d|S[Bdi,Ai]|

显然区间非空,差分拆开后倍增时求和即可,时间复杂度为O(nlogn+qlogn)


JAN2 Mana Collection

d(x,y)xy的最短路,显然仅关心于每个点最后一次被访问的时间

设时间顺序为a1,a2,...,ak(=e)​,即求

maxi=1k1d(ai,ai+1)si=1kmai(sj=ik1d(aj,aj+1))=si=1kmaii=1k1d(ai,ai+1)j=1imaj

关于i=1k1d(ai,ai+1)s的限制,若不满足,则去掉a1后上式必然减小

去掉此限制后,记fS,e{ak}构成集合Sak=ei=1k1d(ai,ai+1)j=1imaj​的最小值,转移易得

在此基础上,答案即maxeSsiSmifS,e,看作关于s的一次函数,对每个e求出其凸包即可

时间复杂度为O(n22n+q)


JAN3 Subtree Activation

f(x,y)={|szxszy|xyszx+szyotherwise

问题即选择排列{an},并最小化sza1+szan+i=1n1f(ai,ai+1)

考虑确定k每个儿子子树内的排列后将k插入,有以下两种情况:

  • 插入到某个儿子的子树内,设相邻两点为x,y,则变化量为2szkszxszyf(x,y)
    • xy成祖先后代关系,该式也即2(szkmax(szx,szy)),取xyk的该儿子即可
    • 否则,该式也即2(szkszxszy),显然劣于前者
  • 插入到两个儿子的子树间,即sza1szan的系数发生变化

由于对称性,定义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(gn1+1)

cntS为Hard集合为S的题目数,定义fS表示强制以S为结尾的方案数,则fS=gcntSTSfT

对此cdq分治,每次转移时用FWT求高维前缀和,时间复杂度为O(nm+m2m)


FEB3 Watching Cowflix

若两个被选择的点间距离k,则可以贪心选择路径上所有点

在此基础上,每个连通块距离k2的点(及自身)不交,即连通块数nk2+12nk

对此建立虚树并树形dp即可,时间复杂度为O(nlogn)


OPEN1 Pareidolia

关于B(s),显然可以贪心匹配,状态为bessie的个数及匹配到的位置

考虑线段树,对于区间[l,r],维护以下信息:

  • 当之前已匹配bessiei个字符时,bessie的个数 和 最终剩余的字符数
  • 当之前已匹配bessiei个字符时,每个前缀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),满足[ijxy]=[ijab]

考虑xyStern-Brocot树XY的子树内,并分类讨论:

  • X>aY>b,显然无解
  • XYab,则xyXY的左子树内时取ij=XY即矛盾,因此仅需考虑XY及其右子树内
  • XY>ab,同理仅需考虑XY及其左子树内

最终,xy的取值即为一条链,并分类讨论:

  • 对于其中XY>ab,则xy=tXtY时取ij=XY即矛盾,仅能取t=1

  • 对于其中XYab,设其构成序列{XkYk},则Xi,Yi单调不降且XiYi单调递增

    换言之,取xy=tXitYi时仅需保证x<Xi+1y<Yi+1,答案也即i=1k1max{Xi+11Xi,Yi+11Yi}+aXk

记值域为V,暴力递归最坏时间复杂度为O(V),但"拐点"至多O(logV)个,每次二分确定该段长度即可

前者直接加上长度即可,后者注意到x0+(t+1)x11x0+tx1t1时为1,仅需特殊处理t=0

时间复杂度为O(log2V)


OPEN3 Triples of Cows

构造一张新图,形式如下:

  • 2n1个点,对应原图中的点和边,并称前者为黑点、后者为白点
  • 黑点向以其为端点的白点连边,并以n为根建树

i天时,将i删除并将相邻的白点合并,则(x,y)存在$\iff jx,y$相邻

(正确性归纳易得)

si为(白点)i的儿子个数,并分类讨论:

  • a,cb相邻的公共白点相同,答案即i(si+1)si(si1)
  • ……不同且均为b的后代,答案即i(sonsson)2sonsson2
  • ……不同且分别为b的祖先/兄弟和后代,答案即i2sijsonsson

用并查集维护i的父亲,并维护相关信息即可,时间复杂度为O(nα(n))

posted @   PYWBKTDA  阅读(438)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 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]热闹的聚会与尴尬的聚会
点击右上角即可分享
微信分享提示