没有参加 NOI2021 捏,所以题面都是贺来的!

看神仙打架真好玩!

懒得组织语言了所以所谓题解都是一大堆支离破碎的 observation

Day 1

T1 - 愚蠢的在线法官 by pjq

题目大意.

给出一棵树(点有点权 v)和一个节点序列 Ai,请你求出

|vLCA(A1,A1)vLCA(A1,A2)vLCA(A1,Ak)vLCA(A2,A1)vLCA(A2,A2)vLCA(A2,Ak)vLCA(Ak,A1)vLCA(Ak,A2)vLCA(Ak,Ak)|

n5×105

T2 - 这是一道集训队胡策题 by xym

题意.

给出一个 n×n 的 01 矩阵 c,求有多少长度为 n 的 01 序列 a,b,满足 ci,j=aici,j=bj。答案对 998244353 取模。

n5000

可见,我们所要满足的就是

[ci,j=ai]+[ci,j=bj][ci,j=ai=bj]=1

怎么看怎么不能算!

关键在于,由于上式必定 1,于是它等价于

i,j[ci,j=ai]+[ci,j=bj][ci,j=ai=bj]=n2

自然也等价于

i,j[ci,j=ai]+[ci,j=bj][ci,j=ai=bj]n2i,j[ci,j=ai]+[ci,j=bj][ai=bj]n2

枚举 ai1 的个数和 bi1 的个数即可。(i,j[ci,j=ai] 只需要取最大值)

T3 - 树上的孤独 by lbc

题目大意.

有一棵大小为 20 的树 TA 和一棵大小为 2×105 的树 TB,每个点都有一个颜色。

你要支持两种操作:

  • 修改 TA 上某个点的颜色;(这个操作不强制在线。)

  • 问:在 TAPA 的子树中距离 PA 至多为 DA 的节点的颜色集合,和在 TBPB 的子树中距离 PB 至多为 DB 的节点的颜色集合的并的大小。

    • DADB强制在线的,需要通过之前的询问答案解密。PA,PB 不强制在线

q106

离线求出:在 TB 上,每个点,每个颜色离自己的最近距离(最小 dep)。线段树合并即可。O(mlogm)

TA 实在太小了,没有什么特别好的办法。现在的问题就是对 TA 中变得合法的每一种颜色,确认它是否在 TB 也合法,实际上我们可以大力求它在 TB 中离 PB 的最近距离。这样还可以支持那个迫真在线,非常舒适。

现在我们拆出了 qn 个询问。这东西是可以离线的,那我们也就没必要在线段树上苦痛,直接 dsu on tree 就好。

Day 2

T1 - 序列 by ztr

题目大意.

现在有一个未知的、长度为 n 的、元素皆是 [1,109] 中的整数的序列 a。现在有一些信息,形如:ai,aj,ak 的中位数的值是 X

请你构造一个符合条件的 a,或者报告无解。

n,m105

构造 2-SAT:

可见有意义的总点数为 O(m) 个。跑一跑即可。

T2 - Imbalance by yg

题目大意.

问有多少个 1,1 构成的序列满足:

  • 其前缀是一个给定的串 S
  • 所有长为 k 的子串元素和皆不为零。

n,k100

先不考虑 S​。

对于 k20,显然是 sb 题。

对于更大的 k,可以看成是在一个周长为 k 的圆柱上游走,问有多少不与自身相交的路径。此时周期数不超过 5,大力爆枚每个周期的起点(205/120)然后大力 LGV(53)即可。

如果考虑 S,上面的做法依然适用,只不过难写一些。

T3 - 学姐买瓜 by zjr

题目大意.

n 次操作,每次操作形如:

  • 加入一个关键区间 [l,r]
  • 询问:考虑 [l,r] 的所有子关键区间,问最大不相交区间数。

n,m3×105

考虑求最大不相交区间数的那个贪心,你会发现加入一个区间的效果就是区间改父亲。珂朵莉树 + LCT(LCT 上的一个点表示一群父亲相同的点)即可。

Day 3

T1 - Lovely Dogs by cxr

题目大意.

定义函数

fd(p1k1p2k2)=i(1)ki[ki<d]

现在有一棵树,点的编号恰是 1n 的排列。你要对每个子树 Tu,vTfd(uv)

n2×105

基本的思路是 dsu on tree。

考虑容斥,记 gd(p1k1p2k2)=i(1)ki,所欲求的就是

u,vTgd(u)gd(v)gd|uvμ(g)

为了迎合 dsu on tree,我们把这玩意化成某个固定的 v 产生的贡献的形式:

gd(v)gμ(g)uTgd(u)[gd|uv]=gd(v)gμ(g)uTgd(u)[gdgcd(gd,v)|u]

事实上我们可以只枚举 g|v:如果 g 不整除 v 又有最后一个条件成立,那么直接有 fd(u)=0,这种 u 是可以直接忽略的。

故时间复杂度为 O(nlog2n)

T2 - Alice、Bob 与 DFS by zlm

真·明哥题

题目大意.

现在有一个 DAG,每个点的出边被认为有序。每个点要么是黑点,要么是白点。

k 个程序,形如:从 rr 不一定全相同)开始进行 DFS。

  • 对于黑点,程序会无条件地依次访问其出边,并递归搜索;
  • 对于白点,程序会在访问每条出边前询问是否跳过该出边;
  • 所有程序在对某个点的搜索开始前会自动暂停。

一开始,所有程序均处于开始搜索起始点前的暂停状态。

有两名玩家在进行博弈。双方轮流进行以下操作,不能操作者输:

  • 选择一个搜索过程尚未完全结束的程序,将其从暂停状态中恢复;
  • 继续执行该程序,在程序将要访问白点的出边时决定是否跳过该边, 直到该程序完全结束或再次暂停。

双方均采取最优策略。判断先手是否必胜。

n2×105,m4×105

下面认为遍历边的顺序是从左至右。

先来考虑【所有点皆为白点、该 DAG 是一棵外向树,起始点总是外向树的根】的简单情形。

此时,dfs(x) 的后继状态是:

u 的子树在 DFS 序中是 [uL,uR],实际上 u 的后继状态就是

直接求个 SG 函数即可。


现在试试推广到【所有点皆为白点、DAG 不必是外向树】的情况。此时一个状态可被一组自 r 开始首尾相接的边描述。自然,这时状态数太多了无法承受。

我们已经知道某状态的后继状态由两部分组成:

后者只依赖于当前节点 u。我们尝试把前者黑箱化为一个集合 S。设这时的 SG 值 集合f(u,S)

显然,设 u 的儿子们为(从右至左)v1,v2,...,有

f(u,S)=Smexf(v1,S)mexf(v2,Smexf(v1,S))

……是啊,确实很显然,但是好像没什么用啊?


下面开始高端操作了!记 mexi(S)S 中第 i 个未出现的元素。显然,mex(S)=mex1(S)。我们断言,mexf(u,S) 必可表为 mexS】。事实上,你只需要注意到:

mex(Smex1Smex2S)=mexmex+1(1,2,)S

就可以归纳出刚刚的结论了。其实我们还可以得到(一层一层嗯展开)

mexf(u,S)=mexmexf(u,{0})S

只需要求出 mexf(u,{0})(其实,显然,它也直接是从 u 开始 dfs 的答案)。用树状数组优化的暴力转移已经可以通过。


最后一个问题,【黑点】。不难发现:

f(u,S)=mex(v,mex(v1,mex))

于是是容易判断的。实际上,更进一步,黑点的 f(u,S) 只有以下四种可能:

f(u,S)={01[0S][0S]

而当我们再回头查看白点时,我们发现黑点的存在破坏了之前归纳得出的结论。或许可以考虑修正一下?

注意 S 中大于 1 的元素不会影响黑点 f(u,) 的取值,因此我们只需要对四种情况分讨即可。事实上更近一步有

mexf(u,S)=mexmexf(u,S{0,1})+1(S/{0,1})

T3 - 音符大师 by dyp

题目大意.

你有两只手,宽度均为 L,一开始均处于 [0,L]

现在有 n 个音符依次出现在 ai 处,你要移动你的手来保证每次音符出现时都被至少一只手覆盖。手从 [x,x+L] 移动到 [y,y+L] 不需要时间,但需要代价 |xy|。问最小移动代价。

n5×104,L50

考虑这样一个 DP:手分别在【[ai,ai+L][aiL,ai]】(用一个 0/1 变量记一下)和【[aj,aj+L][ajL,aj]】处,下一个音符是 i+1

转移时这样考虑:

因此,如果我们找出第一个接不住的音符 X,那么 ak 的取值就只有 L 种了。(因为必须接得住 X

当然,它不够快。

我们对每个 i 开一个线段树,里面维护 (i,j) 的 DP 值。

考虑第一个 i 接不到 的元素 X,它可能能被 aj 接到也可能不能接到,如果是前者,那么 aj 的取值极其有限,暴力转移即可;如果是后者,则可以批量转移上去(需要支持线段树合并)。

时间复杂度 O(nLlogn)

Day4

T1 - 基础图论练习题 by djq

unavailable yet

T2 - 机器 by ckw

线性规划全家桶!

题目大意.

给定一张有向图,点有点权 hipi 个入管道、qi 个出管道。如果 u 可以到达 v,那么任意 u 的入管道就可以和任意 v 的出管道匹配,并获得权值 huhvau,ibv,j。最大化总代价。

n2000,m20000,pi,qi2000

忽略点权,全部加到 ai,bi 上。有显然的网络流模型。

自然写出线性规划:

maxe:Suwefe+e:uTwefee:ufee:ufe=0fe1(e:Sue:uT)fe0

我们把一个点上从 S 连来的边 / 连向 T 的边作为一个整体考虑。

具体来说:如果固定它们对流量的影响(即固定从 S 进入 u 的流量 - 从 T 进入 u 的流量),那么对【边们各自是否满流】的选择是唯一且可以预先处理的。更近一步,它对权值的影响是上凸的

因此我们把线性规划重写为

maxu,imin(Eu,i++Xu,0)+u,imin(Eu,iXu,0)Xu+e:ufee:ufe=0fe0

以下细节值得注意:

自然,把 min(,0) 写开:

maxu,iCu,i+u,iCu,iCu,i++XuEu,i+Cu,iXuEu,iXu+e:ufee:ufe=0fe,Cu,i+,Cu,i0

转成对偶:

maxu,iEu,i+Du,i+u,iEu,iDu,iDu,i+,Du,i1iDu,i+iDu,i+Yu=0YvYu(e:uv)Du,i+,Du,i0

故技重施:当 Yu 确定时,D+D 的最优选择是可以确定的,而且对贡献的影响也是一个凸壳。即,该线性规划可以写为

minuGu(Xu)XuXv(e:uv)

这是一个与 保序回归 问题几乎相同的问题:所有定义和证明都可以搬过来(除了 Lp 均值要改成凸包上的最低点)。我们只需要跑 log 次最大流(整体二分的每一层一次)即可通过。

T3 - 数列重排 by gyh

题目大意.

现在有 n 个数,保证 i 出现的次数是 {0,X,X+1} 之一。

你要对所有 k 求出:若把这些数随意排列,mexk 的区间个数最多可以是多少。

我们称 <k 的元素为白球,k 的元素为黑球。可见黑球并不影响 mex

我们来考虑怎么排列白球。直观地想,肯定是形如 01230123。如果有出现 X+1 次的元素,那就尽量把它们放到每一个周期的开头,让整个序列形如 0123012301

暴力打表可以发现这是对的!

那么现在的问题就是怎么插黑球。定义一个黑球的贡献 w 是以它为开头 / 结尾的区间数。

自然考虑调整法:

因而,(结合打表的结果),我们猜测:答案形如

0123(k1)0123(k1)01

此时,我们发现贡献总和形如

L(L1)/2

其中 L 是连续段长度。

由此,接下来的分析就很简单了。结论为:前 2k2 个黑球平均分配于两端,之后的黑球对每个黑球段平均分配。

Day5

T1 - Speike & Tom by wcz

ix35 哥哥,你就不能少整点这种活吗

unavailable yet

T2 - 聚会 by wwc

题目大意.

请用一堆三元环完美覆盖 Kn 的每一条边。

n3000。保证 n=6k+36k+1

保证:只要 n 满足以上条件就必定有解。

Welcome to the Sacred Order of Steiner Systems

直接丢 ppt:这里

T3 - 细菌 by zzh

题目大意.

现在有一个 n×m×k 的立方体,你要从指定位置开始游走 d 步:每一步可以让任意一个坐标 ±1

问,有多少路径始终没有游走出边界。

n,m,k,d1.2×105

先考虑一维的情况,记起始坐标为 s。对于高维只需要把三个方向卷起来。

我会 O(nd)!直接 DP!

想想别的做法?

考虑容斥掉那些接触过左/右边界的路径。接触过左边界的路径数为

i=0((s+2ii)反射容斥)2ds2i

但是这样会把那些又接触了 L 又接触了 R 的路径数重!那么再数 LR/RL/LRL/RLR……这种东西不会超过 d/n 个!……但是好像不好算?

理一下思路。以上问题可以描述成:

从原点开始向右向上走,且不能越过 y=xsy=x+t 的路径有多少条?

考虑终结于特定的 (x,y) 的路径:我们已经知道它是不超过 d/n 个组合数。

然后考虑全体路径。对于大部分的【当前位置】,向上向右都是可以走的;只对于 O(1) 个【边界位置】,我们需要进行容斥。所要容斥掉的其实就是上一个问题的答案。

所以复杂度是 O(d2/n)

两个结合起来根号分治一下,于是就过了。